diff --git a/.gitignore b/.gitignore index ec9c92ea..eafe4185 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,6 @@ desired_behavior.md # Don't include the python cache for bundled skills. __pycache__/ + +# Local Warp upstream reference checkout (used by pull_warp_feature skill) +.galaxy/ diff --git a/.warp/skills/pull_warp_feature/SKILL.md b/.warp/skills/pull_warp_feature/SKILL.md new file mode 100644 index 00000000..d7c8320e --- /dev/null +++ b/.warp/skills/pull_warp_feature/SKILL.md @@ -0,0 +1,360 @@ +--- +name: pull_warp_feature +description: Pull a feature from the upstream Warp codebase into the Galaxy fork. Use this skill whenever the user wants to port, backport, or bring over a feature from Warp into Galaxy. This skill handles cloning the Warp source, analyzing the feature for Warp-specific dependencies, planning safe replacements, and implementing the port. +--- + +# Pull Warp Feature into Galaxy + +This skill orchestrates porting a feature from the upstream Warp terminal (github.com/warpdotdev/warp) into the Galaxy fork. It is intentionally cautious — Galaxy MUST NOT contain any Warp-proprietary service dependencies, Warp API calls, or Warp cloud infrastructure ties. + +--- + +## Phase 1: Acquire Warp Source + +Before anything else, ensure a clean copy of the Warp source exists locally for reference. + +### Steps + +1. Check if `.galaxy/warp-upstream/` already exists in the project root: + +```bash +ls -d .galaxy/warp-upstream/.git 2>/dev/null +``` + +2. **If it does NOT exist**, clone the Warp repo: + +```bash +mkdir -p .galaxy +git clone --depth 1 https://github.com/warpdotdev/warp.git .galaxy/warp-upstream +``` + + Use `--depth 1` to keep it lightweight. If deeper history is needed for a specific feature, deepen later with `git fetch --unshallow`. + +3. **If it DOES exist**, pull latest: + +```bash +git -C .galaxy/warp-upstream pull --ff-only +``` + +4. **Ensure `.galaxy/` is gitignored.** Check `.gitignore` for a `.galaxy/` entry. If missing, append it: + +```bash +echo ".galaxy/" >> .gitignore +``` + + IMPORTANT: Verify the line doesn't already exist before appending. Use `grep -q "^\.galaxy/" .gitignore` first. + +5. **NEVER commit the `.galaxy/` directory or its contents.** It is a local-only reference checkout. + +--- + +## Phase 2: Identify the Feature + +Once the Warp source is available, ask the user: + +> **What feature are you looking at bringing over?** + +Wait for the user's response. Do NOT proceed until you have a clear answer. + +### Interpreting the response + +- The user may describe the feature by name (e.g. "tab drag and drop", "AI suggestions", "voice input"). +- The user may reference a specific file, module, or PR number. +- The user may describe behavior they saw in Warp and want in Galaxy. + +Accept any of these as valid starting points. + +--- + +## Phase 3: Deep Feature Analysis + +Once you know the target feature, perform a thorough investigation. You need to build a complete dependency map before making any promises. + +### 3a. Locate the feature in Warp source + +Search the Warp source at `.galaxy/warp-upstream/` for the feature: + +- Use `grep`, `codebase_semantic_search`, and `file_glob` against `.galaxy/warp-upstream/` +- Read the relevant source files in full +- Identify the entry points, data models, UI components, and backend calls +- Map out every file the feature touches + +### 3b. Locate the corresponding code in Galaxy + +Search the Galaxy codebase to understand: + +- Does Galaxy already have a partial implementation of this feature? +- What Galaxy modules correspond to the Warp modules this feature touches? +- Are there naming differences? (e.g. `warp_core` → `galaxy_core`, `WarpUI` → `GalaxyUI`) + +### 3c. Build the dependency inventory + +For EVERY dependency the feature has, categorize it into one of these buckets: + +**✅ SAFE — No changes needed:** +- Pure UI logic (elements, views, event handlers) +- Local computation (parsers, formatters, algorithms) +- Terminal emulation logic +- Platform-native APIs (macOS, Windows, Linux) +- Local filesystem operations +- Open-source crate dependencies already in Galaxy's `Cargo.toml` + +**⚠️ REQUIRES REPLACEMENT — Can be ported with modification:** +- Warp AI / LLM calls → Must be replaced with Amazon Bedrock via `BedrockClient` +- Warp API HTTP endpoints → Must be removed or replaced with local storage +- Warp Drive cloud sync → Must be replaced with local `.galaxy/` storage or removed +- Warp authentication/identity → Must be removed or replaced with Galaxy auth +- Warp telemetry/analytics → Must be removed entirely +- Warp-specific feature flags → Must be converted to Galaxy `FeatureFlag` enum variants +- GraphQL queries to Warp server → Must be removed or rerouted + +**🚫 BLOCKED — Cannot be ported:** +- Features that fundamentally require Warp's proprietary backend to function +- Features that require Warp's authentication tokens with no Bedrock/local alternative +- Features requiring real-time sync with Warp's cloud that cannot be made local +- Warp billing/subscription gating logic + +### 3d. Ask follow-up questions + +Based on your analysis, ask the user clarifying questions. These might include: + +- "This feature uses Warp's X service — do you want me to replace it with Y, or skip that part?" +- "There are two sub-features here: A and B. A is clean to port, B requires major rework. Want both?" +- "The Warp version uses cloud storage for Z. Should I store this in `~/.galaxy-ai/` or `.galaxy/`?" +- "This depends on crate X which isn't in Galaxy yet. OK to add it?" + +Do NOT proceed until the user has answered your follow-up questions and you are confident you understand the scope. + +--- + +## Phase 4: Compatibility Assessment + +This is the most critical phase. You must produce a detailed assessment. Go through EVERY dependency from Phase 3c and make a concrete determination. + +### 4a. AI/LLM Dependencies + +If the feature uses Warp AI in any way: + +1. **Identify every AI call site** — What prompts are sent? What models are used? What's the expected response format? +2. **Determine if Bedrock can handle it** — Galaxy uses `BedrockClient::converse_stream` (see `app/src/ai/bedrock/client.rs`). The feature's AI usage MUST be expressible as Bedrock Converse API calls. +3. **Check for Warp-specific prompt engineering** — System prompts in Warp may reference Warp-specific context. These must be rewritten for Galaxy. +4. **Check for Warp-specific tool use** — If the feature defines custom AI tools, verify they don't call Warp APIs internally. +5. **Verdict**: Can it be "Bedrockified"? If NO → the feature CANNOT be ported. Stop and inform the user. + +Key files for Bedrock integration reference: +- `app/src/ai/bedrock/client.rs` — Client implementation +- `app/src/ai/bedrock/convert_request.rs` — Request construction and system prompts +- `app/src/ai/bedrock/convert.rs` — Wire format conversion +- `app/src/ai/bedrock/tool_docs.rs` — Tool documentation +- `app/src/ai/bedrock/stream.rs` — Response stream processing + +### 4b. Cloud Storage / Warp API Dependencies + +If the feature calls Warp API endpoints or uses Warp Drive: + +1. **List every HTTP/GraphQL call** the feature makes to Warp servers +2. **For each call, determine:** + - Can it be removed entirely without breaking the feature? + - Can it be replaced with local file storage in `~/.galaxy-ai/` or project-local `.galaxy/`? + - Can it be replaced with a different API (e.g. direct AWS call)? +3. **If it requires Warp server and there's no local alternative** → that specific sub-feature CANNOT be ported +4. **Local storage patterns to use:** + - User-scoped data: `~/.galaxy-ai//` + - Project-scoped data: `.galaxy//` (ensure gitignored) + - SQLite via Diesel: `app/src/persistence/` (for data that fits Galaxy's existing DB) + +### 4c. Authentication Dependencies + +If the feature requires Warp authentication: + +1. Does Galaxy have its own auth that can substitute? +2. If the feature gates on "is the user logged in" — can this gate be removed? +3. If the feature requires user identity — can it use a local config value instead? + +### 4d. Telemetry / Analytics + +Any Warp telemetry, analytics, or tracking code MUST be stripped entirely. Do not replace it — remove it. + +### 4e. Naming and Branding + +All references to "Warp" in user-facing strings, comments, and identifiers must be changed to "Galaxy": +- `warp` → `galaxy` +- `Warp` → `Galaxy` +- `WARP` → `GALAXY` +- `warp_core` → `galaxy_core` +- `WarpUI` → `GalaxyUI` +- etc. + +This includes: +- Rust module names and paths +- Struct/enum/function names +- String literals shown to users +- Comments and documentation +- Environment variable prefixes (`WARP_` → `GALAXY_`) +- Config file paths (`~/.warp/` → `~/.galaxy-ai/`) + +--- + +## Phase 5: Present Findings and Plan + +Present the user with a structured summary using the `create_plan` tool. The plan MUST include: + +1. **Feature summary**: What the feature does in Warp, in 2-3 sentences +2. **Files to port**: Exact list of files from `.galaxy/warp-upstream/` and where they map in Galaxy +3. **Dependency assessment table** (as a list, not a markdown table): + - For each dependency: what it is, its category (SAFE / REQUIRES REPLACEMENT / BLOCKED), and the replacement strategy +4. **AI assessment**: Does it need AI? Can it be Bedrockified? What changes are needed? +5. **Cloud/API assessment**: Does it call Warp servers? What's the local replacement? +6. **Storage assessment**: Where will data live? What gets gitignored? +7. **Risk areas**: What might break? What needs extra testing? +8. **Estimated scope**: How many files are touched? Is this a 1-hour or 1-week port? + +**CRITICAL**: Do NOT proceed to implementation until the user explicitly approves the plan. + +If any part of the feature is BLOCKED, clearly state: +> "The following parts of this feature CANNOT be ported because they fundamentally require Warp's proprietary infrastructure: [list]. I recommend porting only the parts that are SAFE or REQUIRES REPLACEMENT." + +--- + +## Phase 6: Implementation + +Only after the user approves the plan, begin implementation. + +### Implementation Rules + +These rules are NON-NEGOTIABLE: + +1. **NEVER copy Warp API URLs, tokens, or endpoint paths into Galaxy code.** +2. **NEVER leave Warp telemetry/analytics calls in the code, even commented out.** +3. **NEVER leave `warp` branding in user-facing strings.** Internal code comments referencing the upstream origin (e.g. "Ported from Warp's X module") are acceptable. +4. **ALL AI calls MUST go through `BedrockClient`** — no direct OpenAI, Anthropic, or other provider calls. +5. **ALL cloud storage MUST be local** — `~/.galaxy-ai/` for user data, `.galaxy/` for project data, or Diesel/SQLite for persistent structured data. +6. **ALL feature flags MUST use Galaxy's `FeatureFlag` enum** in `galaxy_features/src/lib.rs`. +7. **ALL environment variables MUST use the `GALAXY_` prefix.** +8. **ALL config paths MUST use `~/.galaxy-ai/`** not `~/.warp/`. + +### Implementation Procedure + +1. **Create a TODO list** with discrete steps for the port. + +2. **Port files one module at a time**, in dependency order (deepest dependencies first, UI last): + - Copy the file from `.galaxy/warp-upstream/` to the correct Galaxy location + - Rename all Warp references to Galaxy equivalents + - Replace all REQUIRES REPLACEMENT dependencies with Galaxy alternatives + - Remove all BLOCKED dependencies and any code paths that depend on them + - Ensure all `use` / `mod` statements point to Galaxy crate names + +3. **After each module**, verify it compiles: + ```bash + cargo check -p + ``` + +4. **After all modules are ported**, run full workspace checks: + ```bash + cargo fmt + cargo clippy --workspace --all-targets --all-features --tests -- -D warnings + ``` + +5. **If the feature has tests in Warp**, port the tests too: + - Place tests in `${filename}_tests.rs` per Galaxy convention + - Update test assertions to reflect Galaxy behavior (no Warp API mocking) + - Run tests: + ```bash + cargo nextest run --no-fail-fast -p + ``` + +6. **Update documentation**: + - Update `GALAXY.md` if the feature changes architecture or adds commands + - Update `WARP.md` if it exists and needs corresponding changes + - Update `CLAUDE.md` if it exists in the project + +7. **Final validation**: + ```bash + cargo build + cargo nextest run --no-fail-fast --workspace --exclude command-signatures-v2 + ``` + +### Post-Implementation Audit + +After implementation, perform a final audit. Search the entire diff for: + +```bash +# In the changed files, search for any Warp leaks +grep -rn "warp\.dev" +grep -rn "api\.warp" +grep -rn "warpdotdev" +grep -rn "warp-server" +grep -rn "WARP_API" +grep -rn "warp_api" +``` + +Any hits (other than comments documenting the port origin) are bugs that must be fixed before completion. + +Also verify no `.galaxy/` files were staged: + +```bash +git status --porcelain | grep "^A.*\.galaxy/" +``` + +--- + +## Reference: Galaxy ↔ Warp Name Mapping + +Common renames when porting: + +- `warp` → `galaxy` (crate names, binary names) +- `warp_core` → `galaxy_core` +- `warpui` → `galaxyui` +- `warpui_core` → `galaxyui_core` +- `warpui_extras` → `galaxyui_extras` +- `warp_terminal` → `galaxy_terminal` +- `warp_util` → `galaxy_util` +- `warp_features` → `galaxy_features` +- `warp_completer` → `galaxy_completer` +- `warp_graphql_schema` → `galaxy_graphql_schema` +- `warp_cli` → `galaxy_cli` +- `WARP_` prefix env vars → `GALAXY_` +- `~/.warp/` → `~/.galaxy-ai/` +- Warp AI server endpoints → `BedrockClient::converse_stream` +- Warp Drive → local storage in `~/.galaxy-ai/` or `.galaxy/` +- `WarpAI` / `warp_ai` → `GalaxyAI` / `galaxy_ai` + +## Reference: Bedrock Integration Points + +When replacing Warp AI calls with Bedrock: + +- Client: `app/src/ai/bedrock/client.rs` — `BedrockClient::converse_stream` +- Request building: `app/src/ai/bedrock/convert_request.rs` +- Response parsing: `app/src/ai/bedrock/stream.rs` +- Tool definitions: `app/src/ai/bedrock/tool_docs.rs` +- AWS credentials: `app/src/ai/aws_credentials.rs` +- Model selection: `app/src/ai/llms.rs` + +All AI features MUST flow through these modules. Direct HTTP calls to any LLM provider are forbidden. + +## Reference: Local Storage Patterns + +When replacing Warp cloud storage: + +- **User preferences / global state**: `~/.galaxy-ai//` +- **Project-scoped state**: `/.galaxy//` (must be gitignored) +- **Structured persistent data**: Use Diesel ORM + SQLite via `app/src/persistence/` +- **Cached/temporary data**: `$TMPDIR/galaxy_/` + +--- + +## Failure Modes — When to STOP + +STOP the port and inform the user if: + +1. The feature's core functionality requires real-time communication with Warp's servers and there is no local alternative. +2. The feature's AI usage cannot be expressed as Bedrock Converse API calls (e.g. it requires fine-tuned Warp-specific models with no public equivalent). +3. The feature depends on Warp-proprietary data formats or protocols that are not documented in the open-source repo. +4. Porting the feature would require modifying more than 30% of Galaxy's existing codebase — this suggests architectural incompatibility. +5. The feature's tests all depend on Warp server mocks that have no Galaxy equivalent, making it untestable. + +In these cases, present the user with: +- WHY the port is blocked +- WHICH specific dependency is the blocker +- WHETHER a partial port (subset of functionality) is viable +- WHAT alternative approaches might achieve similar UX without the blocked dependency diff --git a/GALAXY.md b/GALAXY.md index f50ca6b1..dd067a6f 100644 --- a/GALAXY.md +++ b/GALAXY.md @@ -160,6 +160,11 @@ When adding/editing match statements, avoid using the wildcard _ when at all pos - MCP config: `~/.galaxy-ai/.mcp.json` - Environment variables use `GALAXY_` prefix (e.g., `GALAXY_API_KEY`, `GALAXY_INTEGRATION`) +### Skills + +**pull_warp_feature** (`.warp/skills/pull_warp_feature/SKILL.md`): +Ports features from upstream Warp into Galaxy. Clones Warp source into `.galaxy/warp-upstream/` (gitignored), analyzes the feature for Warp-specific dependencies (AI → Bedrock, cloud → local storage, telemetry → removed), presents a compatibility plan, and implements the port after approval. All AI must go through `BedrockClient`; all cloud storage must be local. + ## Future Work ### IDE-Level LSP Integration diff --git a/app/Cargo.toml b/app/Cargo.toml index 1dc46456..24c5c132 100644 --- a/app/Cargo.toml +++ b/app/Cargo.toml @@ -1,7 +1,7 @@ [package] authors = ["Ryan Ward "] -default-run = "galaxy-ai-oss" -description = "Galaxy AI - AI-powered terminal for development teams" +default-run = "galaxy-oss" +description = "Galaxy - AI-powered terminal" edition = "2021" autobins = false name = "galaxy" @@ -18,27 +18,27 @@ path = "src/lib.rs" # flag overrides). Otherwise these binaries are exactly identical to our main binary. [[bin]] -name = "galaxy-ai-oss" +name = "galaxy-oss" path = "src/bin/oss.rs" test = false [[bin]] -name = "galaxy-ai" +name = "galaxy-local" path = "src/bin/local.rs" test = false [[bin]] -name = "stable" +name = "galaxy-stable" path = "src/bin/stable.rs" test = false [[bin]] -name = "dev" +name = "galaxy-dev" path = "src/bin/dev.rs" test = false [[bin]] -name = "preview" +name = "galaxy-preview" path = "src/bin/preview.rs" required-features = ["preview_channel"] test = false @@ -932,55 +932,46 @@ codex_notifications = [] cloud_mode_setup_v2 = ["cloud_mode"] cloud_mode_input_v2 = ["cloud_mode"] -[package.metadata.bundle.bin.warp-oss] +[package.metadata.bundle.bin.galaxy-oss] category = "public.app-category.developer-tools" -copyright = "© 2025, Denver Technologies, Inc" -identifier = "dev.galaxy.GalaxyOss" +copyright = "© 2026, Samsung Electronics Co., Ltd." +identifier = "com.samsung.Galaxy" name = "Galaxy" resources = ["assets/onboarding"] icon = ["channels/oss/icon/no-padding/512x512.png", "channels/oss/icon/no-padding/icon.ico"] -short_description = "The open-source, cloud-backed terminal for individuals and teams." +short_description = "Galaxy - AI-powered terminal for development teams." -[package.metadata.bundle.bin.stable] +[package.metadata.bundle.bin.galaxy-stable] category = "public.app-category.developer-tools" -copyright = "© 2025, Denver Technologies, Inc" -identifier = "dev.galaxy.Galaxy-Stable" +copyright = "© 2026, Samsung Electronics Co., Ltd." +identifier = "com.samsung.Galaxy-Stable" name = "Galaxy" -osx_frameworks = [ - "frameworks/default/Sentry-Dynamic-WithARM64e.xcframework/macos-arm64_arm64e_x86_64/Sentry.framework", -] resources = ["assets/onboarding"] -short_description = "The cloud-backed terminal for individuals and teams, stable build." +short_description = "Galaxy - AI-powered terminal, stable build." -[package.metadata.bundle.bin.preview] +[package.metadata.bundle.bin.galaxy-preview] category = "public.app-category.developer-tools" -copyright = "© 2025, Denver Technologies, Inc" -identifier = "dev.galaxy.Galaxy-Preview" -name = "GalaxyPreview" -osx_frameworks = [ - "frameworks/default/Sentry-Dynamic-WithARM64e.xcframework/macos-arm64_arm64e_x86_64/Sentry.framework", -] +copyright = "© 2026, Samsung Electronics Co., Ltd." +identifier = "com.samsung.Galaxy-Preview" +name = "Galaxy Preview" resources = ["assets/onboarding"] -short_description = "The cloud-backed terminal for individuals and teams, feature preview build." +short_description = "Galaxy - AI-powered terminal, preview build." -[package.metadata.bundle.bin.dev] +[package.metadata.bundle.bin.galaxy-dev] category = "public.app-category.developer-tools" -copyright = "© 2025, Denver Technologies, Inc" -identifier = "dev.galaxy.Galaxy-Dev" -name = "GalaxyDev" -osx_frameworks = [ - "frameworks/dev/Sentry-Dynamic-WithARM64e.xcframework/macos-arm64_arm64e_x86_64/Sentry.framework", -] +copyright = "© 2026, Samsung Electronics Co., Ltd." +identifier = "com.samsung.Galaxy-Dev" +name = "Galaxy Dev" resources = ["assets/onboarding"] -short_description = "The cloud-backed terminal for individuals and teams, developer build." +short_description = "Galaxy - AI-powered terminal, developer build." -[package.metadata.bundle.bin.warp] +[package.metadata.bundle.bin.galaxy-local] category = "public.app-category.developer-tools" -copyright = "© 2025, Denver Technologies, Inc" -identifier = "dev.galaxy.Galaxy-Local" -name = "GalaxyLocal" +copyright = "© 2026, Samsung Electronics Co., Ltd." +identifier = "com.samsung.Galaxy-Local" +name = "Galaxy Local" resources = ["assets/onboarding"] -short_description = "The cloud-backed terminal for individuals and teams, developer build." +short_description = "Galaxy - AI-powered terminal, local build." [package.metadata.cargo-udeps.ignore] normal = ["embed_plist"] diff --git a/app/DockTilePlugin/Info.plist b/app/DockTilePlugin/Info.plist index d8eef742..b83b3c15 100644 --- a/app/DockTilePlugin/Info.plist +++ b/app/DockTilePlugin/Info.plist @@ -3,11 +3,11 @@ CFBundleIdentifier - com.samsung.GalaxyAIDockTilePlugin + com.samsung.GalaxyDockTilePlugin CFBundleExecutable WarpDockTilePlugin CFBundleName - GalaxyAIDockTilePlugin + GalaxyDockTilePlugin CFBundlePackageType BNDL CFBundleShortVersionString diff --git a/app/assets/async/png/galaxy-logo.png b/app/assets/async/png/galaxy-logo.png new file mode 100644 index 00000000..15f09954 Binary files /dev/null and b/app/assets/async/png/galaxy-logo.png differ diff --git a/app/assets/bundled/galaxy-logo.png b/app/assets/bundled/galaxy-logo.png new file mode 100644 index 00000000..15f09954 Binary files /dev/null and b/app/assets/bundled/galaxy-logo.png differ diff --git a/app/assets/bundled/svg/galaxy-logo.svg b/app/assets/bundled/svg/galaxy-logo.svg new file mode 100644 index 00000000..5fe93baf --- /dev/null +++ b/app/assets/bundled/svg/galaxy-logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + Galaxy + diff --git a/app/build.rs b/app/build.rs index b83eb19b..6a19eba7 100644 --- a/app/build.rs +++ b/app/build.rs @@ -142,77 +142,9 @@ fn main() -> Result<()> { copy_async_assets(); } - generate_channel_config_if_needed(&target_family, &target_os); - Ok(()) } -/// If `warp-channel-config` is available on PATH and the `release_bundle` feature is enabled, -/// invoke the config generator binary and write the JSON output to `OUT_DIR` so it can be -/// embedded via `include_str!` in the binary entry points. -fn generate_channel_config_if_needed(target_family: &str, target_os: &str) { - if env::var("CARGO_FEATURE_RELEASE_BUNDLE").is_err() { - // For non-bundled builds, config is loaded at runtime — nothing to embed. - return; - } - - let config_bin = "warp-channel-config"; - - // Check if the config binary is available on PATH. If not, we can't generate embedded - // configs. This is expected for external contributors building Warp OSS. - if Command::new(config_bin) - .arg("--help") - .stdout(std::process::Stdio::null()) - .stderr(std::process::Stdio::null()) - .status() - .is_err() - { - return; - } - - // Only track these for bundled builds, where they affect the embedded config. - // For non-bundled builds these are runtime variables and should not trigger recompilation. - println!("cargo:rerun-if-env-changed=WITH_LOCAL_SERVER"); - println!("cargo:rerun-if-env-changed=WITH_LOCAL_SESSION_SHARING_SERVER"); - println!("cargo:rerun-if-env-changed=WITH_SANDBOX_TELEMETRY"); - println!("cargo:rerun-if-env-changed=SERVER_ROOT_URL"); - println!("cargo:rerun-if-env-changed=WS_SERVER_URL"); - - let out_dir = env::var("OUT_DIR").expect("OUT_DIR must be set"); - let family_arg = if target_family == "wasm" { - "wasm" - } else { - "native" - }; - - // Generate config for all internal channels. The build script runs once per crate (not - // once per binary), so we generate all configs here and each binary's include_str! picks - // up its own file. - for channel in ["local", "dev", "stable", "preview"] { - let output = Command::new(config_bin) - .arg("--channel") - .arg(channel) - .arg("--target-family") - .arg(family_arg) - .arg("--target-os") - .arg(target_os) - .output() - .unwrap_or_else(|err| { - panic!("Failed to execute config generator at '{config_bin}': {err}") - }); - - if !output.status.success() { - let stderr = String::from_utf8_lossy(&output.stderr); - panic!("Config generator failed for channel '{channel}':\n{stderr}"); - } - - let config_path = Path::new(&out_dir).join(format!("{channel}_config.json")); - fs::write(&config_path, &output.stdout).unwrap_or_else(|err| { - panic!("Failed to write config to {}: {err}", config_path.display()) - }); - } -} - fn get_build_profile_name() -> String { // The profile name is always the 3rd last part of the path (with 1 based indexing). // e.g. /code/core/target/cli/build/my-build-info-9f91ba6f99d7a061/out diff --git a/app/src/ai/agent_tips.rs b/app/src/ai/agent_tips.rs index 6667f224..0908a948 100644 --- a/app/src/ai/agent_tips.rs +++ b/app/src/ai/agent_tips.rs @@ -290,7 +290,7 @@ static DEFAULT_TIPS: LazyLock> = LazyLock::new(|| { kind: AgentTipKind::Context, }, AgentTip { - description: "Galaxify a remote SSH session to enable the agent inside that environment.".to_string(), + description: "Galaxyize a remote SSH session to enable the agent inside that environment.".to_string(), link: Some("https://docs.warp.dev/terminal/warpify".to_string()), binding_name: None, action: None, diff --git a/app/src/ai/blocklist/agent_view/agent_input_footer/mod.rs b/app/src/ai/blocklist/agent_view/agent_input_footer/mod.rs index 06692a64..a669ecd0 100644 --- a/app/src/ai/blocklist/agent_view/agent_input_footer/mod.rs +++ b/app/src/ai/blocklist/agent_view/agent_input_footer/mod.rs @@ -15,7 +15,6 @@ use crate::{ AIRequestUsageModel, }, appearance::Appearance, - auth::{AuthManager, AuthStateProvider}, completer::SessionContext, context_chips::{ self, @@ -84,11 +83,10 @@ use tokio::fs; use voice_input::{StartListeningError, VoiceSessionResult}; use galaxy_core::{ - context_flag::ContextFlag, report_if_error, ui::{ color::{blend::Blend, contrast::MinimumAllowedContrast, ContrastingColor}, - theme::{color::internal_colors, AnsiColorIdentifier, Fill}, + theme::{color::internal_colors, Fill}, }, }; #[cfg(feature = "voice_input")] @@ -127,9 +125,6 @@ const DISABLE_NLD_TOOLTIP: &str = "Disable terminal command autodetection"; const FAST_FORWARD_ON_TOOLTIP: &str = "Turn off auto-approve all agent actions"; const FAST_FORWARD_OFF_TOOLTIP: &str = "Auto-approve all agent actions for this task"; -const START_REMOTE_CONTROL_TOOLTIP: &str = "Start remote control"; -const START_REMOTE_CONTROL_LOGIN_REQUIRED_TOOLTIP: &str = "Log in to use /remote-control"; - const CLOUD_MODE_V2_FOOTER_GAP: f32 = 4.; /// Voice input state for the CLI agent footer. Unlike the editor-based voice @@ -189,8 +184,6 @@ pub struct AgentInputFooter { mic_button: ViewHandle, nld_button: ViewHandle, file_button: ViewHandle, - start_remote_control_button: ViewHandle, - stop_remote_control_button: ViewHandle, context_window_button: ViewHandle, model_selector: ViewHandle, ftu_callout_close_button: ViewHandle, @@ -547,29 +540,6 @@ impl AgentInputFooter { }, ); - let start_remote_control_button = ctx.add_typed_action_view(|_ctx| { - ActionButton::new("/remote-control", AgentInputButtonTheme) - .with_icon(Icon::Phone01) - .with_tooltip(START_REMOTE_CONTROL_TOOLTIP) - .with_size(cli_button_size) - .with_tooltip_alignment(TooltipAlignment::Left) - .on_click(|ctx| { - ctx.dispatch_typed_action(AgentInputFooterAction::StartRemoteControl); - }) - }); - - let stop_remote_control_button = ctx.add_typed_action_view(|_ctx| { - ActionButton::new("Stop sharing", AgentInputButtonTheme) - .with_icon(Icon::StopFilled) - .with_icon_ansi_color(AnsiColorIdentifier::Red) - .with_tooltip("Stop sharing") - .with_size(cli_button_size) - .with_tooltip_alignment(TooltipAlignment::Left) - .on_click(|ctx| { - ctx.dispatch_typed_action(AgentInputFooterAction::StopRemoteControl); - }) - }); - let context_window_button = ctx.add_typed_action_view(|_ctx| { ActionButton::new("", AgentInputButtonTheme) .with_icon(Icon::ConversationContext0) @@ -643,13 +613,6 @@ impl AgentInputFooter { } }); - // Keep the remote-control chip in sync with login state so we can - // disable it and swap the tooltip when the user is anonymous or - // logged out. - ctx.subscribe_to_model(&AuthManager::handle(ctx), |me, _, _, ctx| { - me.sync_remote_control_button(ctx); - }); - let prompt_for_session_settings = prompt.clone(); ctx.subscribe_to_model( &SessionSettings::handle(ctx), @@ -727,8 +690,6 @@ impl AgentInputFooter { file_explorer_button, rich_input_button, settings_button, - start_remote_control_button, - stop_remote_control_button, install_plugin_button, plugin_instructions_button, update_plugin_button, @@ -762,7 +723,6 @@ impl AgentInputFooter { v2_model_selector, }; me.sync_fast_forward_button(ctx); - me.sync_remote_control_button(ctx); me.update_context_window_button(ctx); me.update_display_chips(&prompt, ctx); me.update_ftu_callout_render_state(ctx); @@ -1294,21 +1254,6 @@ impl AgentInputFooter { #[cfg(not(feature = "voice_input"))] None } - AgentToolbarItemKind::ShareSession => { - let enabled = FeatureFlag::CreatingSharedSessions.is_enabled() - && FeatureFlag::HOARemoteControl.is_enabled() - && ContextFlag::CreateSharedSession.is_enabled(); - if !enabled { - return None; - } - - let button = if shared_status.is_sharer() { - &self.stop_remote_control_button - } else { - &self.start_remote_control_button - }; - Some(ChildView::new(button).finish()) - } AgentToolbarItemKind::Settings => Some(ChildView::new(&self.settings_button).finish()), // Handled by the available_in() guard above; included for exhaustiveness. AgentToolbarItemKind::ModelSelector @@ -1787,24 +1732,6 @@ impl AgentInputFooter { }); } - /// Disable the start-remote-control chip and swap its tooltip when the - /// user is anonymous or logged out, since session sharing requires a - /// real account. - fn sync_remote_control_button(&self, ctx: &mut ViewContext) { - let login_required = AuthStateProvider::as_ref(ctx) - .get() - .is_anonymous_or_logged_out(); - let tooltip = if login_required { - START_REMOTE_CONTROL_LOGIN_REQUIRED_TOOLTIP - } else { - START_REMOTE_CONTROL_TOOLTIP - }; - self.start_remote_control_button.update(ctx, |button, ctx| { - button.set_disabled(login_required, ctx); - button.set_tooltip(Some(tooltip), ctx); - }); - } - fn update_context_window_button(&mut self, ctx: &mut ViewContext) { if let Some(conversation) = BlocklistAIHistoryModel::as_ref(ctx).active_conversation(self.terminal_view_id) @@ -1874,20 +1801,6 @@ impl AgentInputFooter { .is_some(); has_conversation.then(|| ChildView::new(&self.context_window_button).finish()) } - AgentToolbarItemKind::ShareSession => { - let enabled = FeatureFlag::CreatingSharedSessions.is_enabled() - && FeatureFlag::HOARemoteControl.is_enabled() - && ContextFlag::CreateSharedSession.is_enabled(); - if !enabled { - return None; - } - let button = if shared_status.is_sharer() { - &self.stop_remote_control_button - } else { - &self.start_remote_control_button - }; - Some(ChildView::new(button).finish()) - } AgentToolbarItemKind::FastForwardToggle => FeatureFlag::FastForwardAutoexecuteButton .is_enabled() .then(|| ChildView::new(&self.fast_forward_button).finish()), @@ -2144,8 +2057,6 @@ pub enum AgentInputFooterAction { OpenPluginInstallInstructionsPane, OpenPluginUpdateInstructionsPane, DismissPluginChip, - StartRemoteControl, - StopRemoteControl, OpenCodingAgentSettings, ShowContextMenu { position: Vector2F, @@ -2330,12 +2241,6 @@ impl TypedActionView for AgentInputFooter { } ctx.notify(); } - AgentInputFooterAction::StartRemoteControl => { - ctx.emit(AgentInputFooterEvent::StartRemoteControl); - } - AgentInputFooterAction::StopRemoteControl => { - ctx.emit(AgentInputFooterEvent::StopRemoteControl); - } AgentInputFooterAction::OpenCodingAgentSettings => { #[cfg(not(target_family = "wasm"))] ctx.dispatch_typed_action_deferred(WorkspaceAction::ScrollToSettingsWidget { @@ -2361,8 +2266,6 @@ pub enum AgentInputFooterEvent { InsertIntoCLIRichInput(String), ToggleCodeReviewPane(CLIAgent), ToggleFileExplorer(CLIAgent), - StartRemoteControl, - StopRemoteControl, OpenRichInput, HideRichInput, ToggledChipMenu { diff --git a/app/src/ai/blocklist/agent_view/agent_input_footer/toolbar_item.rs b/app/src/ai/blocklist/agent_view/agent_input_footer/toolbar_item.rs index 2d47ffa0..9aeabad0 100644 --- a/app/src/ai/blocklist/agent_view/agent_input_footer/toolbar_item.rs +++ b/app/src/ai/blocklist/agent_view/agent_input_footer/toolbar_item.rs @@ -61,7 +61,6 @@ pub enum AgentToolbarItemKind { // Renamed from ImageAttach; alias preserves existing user toolbar configs. #[serde(alias = "ImageAttach")] FileAttach, - ShareSession, // CLI agent only – opens settings to the Coding Agents section. Settings, @@ -73,7 +72,7 @@ pub enum AgentToolbarItemKind { impl AgentToolbarItemKind { pub fn available_in(&self) -> ToolbarAvailability { match self { - Self::ContextChip(_) | Self::VoiceInput | Self::FileAttach | Self::ShareSession => { + Self::ContextChip(_) | Self::VoiceInput | Self::FileAttach => { ToolbarAvailability::Both } Self::ModelSelector @@ -95,7 +94,7 @@ impl AgentToolbarItemKind { is_cloud_mode: bool, ) -> bool { match self { - Self::Settings | Self::ShareSession | Self::FileExplorer => !status.is_viewer(), + Self::Settings | Self::FileExplorer => !status.is_viewer(), Self::FileAttach => !status.is_viewer() || is_cloud_mode, Self::FastForwardToggle => !status.is_viewer() || status.is_executor(), Self::ContextChip(_) @@ -117,7 +116,6 @@ impl AgentToolbarItemKind { Self::ContextWindowUsage => "Context Usage", Self::FileExplorer => "File Explorer", Self::RichInput => "Rich Input", - Self::ShareSession => "/remote-control", Self::Settings => "Settings", Self::FastForwardToggle => "Fast Forward", } @@ -133,7 +131,6 @@ impl AgentToolbarItemKind { Self::ContextWindowUsage => Some(Icon::ConversationContext0), Self::FileExplorer => Some(Icon::FileCopy), Self::RichInput => Some(Icon::TextInput), - Self::ShareSession => Some(Icon::Phone01), Self::Settings => Some(Icon::Settings), Self::FastForwardToggle => Some(Icon::FastForward), } @@ -172,11 +169,6 @@ impl AgentToolbarItemKind { Self::ContextWindowUsage, Self::ModelSelector, ]; - if FeatureFlag::CreatingSharedSessions.is_enabled() - && FeatureFlag::HOARemoteControl.is_enabled() - { - items.push(Self::ShareSession); - } items.push(Self::VoiceInput); items.push(Self::FileAttach); items @@ -198,11 +190,6 @@ impl AgentToolbarItemKind { if FeatureFlag::FastForwardAutoexecuteButton.is_enabled() { items.push(Self::FastForwardToggle); } - if FeatureFlag::CreatingSharedSessions.is_enabled() - && FeatureFlag::HOARemoteControl.is_enabled() - { - items.push(Self::ShareSession); - } items } @@ -213,11 +200,6 @@ impl AgentToolbarItemKind { Self::VoiceInput, Self::ContextChip(ContextChipKind::GitDiffStats), ]; - if FeatureFlag::CreatingSharedSessions.is_enabled() - && FeatureFlag::HOARemoteControl.is_enabled() - { - items.push(Self::ShareSession); - } items.push(Self::FileExplorer); if FeatureFlag::CLIAgentRichInput.is_enabled() { items.push(Self::RichInput); @@ -247,11 +229,6 @@ impl AgentToolbarItemKind { Self::VoiceInput, Self::Settings, ]); - if FeatureFlag::CreatingSharedSessions.is_enabled() - && FeatureFlag::HOARemoteControl.is_enabled() - { - items.push(Self::ShareSession); - } items } diff --git a/app/src/app_menus.rs b/app/src/app_menus.rs index da13fdbb..7a1b85f8 100644 --- a/app/src/app_menus.rs +++ b/app/src/app_menus.rs @@ -51,8 +51,8 @@ const SHOW_BOOTSTRAP_BLOCK_MENU_ITEM_NAME: &str = "Show Initialization Block"; const HIDE_BOOTSTRAP_BLOCK_MENU_ITEM_NAME: &str = "Hide Initialization Block"; const SHOW_IN_BAND_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Show In-band Command Blocks"; const HIDE_IN_BAND_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Hide In-band Command Blocks"; -const SHOW_SSH_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Show Warpified SSH Blocks"; -const HIDE_SSH_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Hide Warpified SSH Blocks"; +const SHOW_SSH_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Show Enhanced SSH Blocks"; +const HIDE_SSH_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Hide Enhanced SSH Blocks"; const EXPORT_DEFAULT_SETTINGS_CSV_MENU_ITEM_NAME: &str = "Export Default Settings as CSV to home dir"; @@ -208,7 +208,7 @@ fn make_new_app_menu(ctx: &AppContext) -> Menu { menu_items.push(MenuItem::Standard(StandardAction::ShowAllApps)); menu_items.push(MenuItem::Separator); menu_items.push(MenuItem::Custom(CustomMenuItem::new( - "Set Warp as Default Terminal", + "Set Galaxy as Default Terminal", move |ctx| { DefaultTerminal::handle(ctx).update(ctx, |default_terminal, ctx| { default_terminal.make_warp_default(ctx) @@ -299,7 +299,7 @@ fn make_new_edit_menu(ctx: &AppContext) -> Menu { ]; let group_5 = vec![ MenuItem::Custom(CustomMenuItem::new( - "Use Warp's Prompt", + "Use Galaxy's Prompt", move |ctx| ctx.dispatch_global_action("app:toggle_user_ps1", &()), move |_props, ctx| MenuItemPropertyChanges { checked: Some( @@ -924,9 +924,9 @@ fn make_new_help_menu() -> Menu { "Help", vec![ feedback_menu_item(), - link_menu_item("Warp Documentation...", links::USER_DOCS_URL.into()), + link_menu_item("Galaxy Documentation...", links::USER_DOCS_URL.into()), link_menu_item("GitHub Issues...", links::GITHUB_ISSUES_URL.into()), - link_menu_item("Warp Slack Community...", links::SLACK_URL.into()), + link_menu_item("Galaxy Slack Community...", links::SLACK_URL.into()), ], ) } diff --git a/app/src/autoupdate/mac.rs b/app/src/autoupdate/mac.rs index d9be46f1..4a9e7c55 100644 --- a/app/src/autoupdate/mac.rs +++ b/app/src/autoupdate/mac.rs @@ -732,11 +732,11 @@ fn dmg_name(channel: Channel) -> String { fn app_name_prefix(channel: Channel) -> &'static str { match channel { - Channel::Stable => "GalaxyAI", - Channel::Preview => "GalaxyAIPreview", + Channel::Stable => "Galaxy", + Channel::Preview => "GalaxyPreview", Channel::Local => "galaxy-ai", Channel::Integration => "integration", - Channel::Dev => "GalaxyAIDev", + Channel::Dev => "GalaxyDev", Channel::Oss => "galaxy-ai-oss", } } diff --git a/app/src/autoupdate/windows.rs b/app/src/autoupdate/windows.rs index dddf0412..6ab7815c 100644 --- a/app/src/autoupdate/windows.rs +++ b/app/src/autoupdate/windows.rs @@ -254,11 +254,11 @@ fn installer_file_name() -> Result { fn app_name_prefix(channel: Channel) -> &'static str { match channel { - Channel::Stable => "GalaxyAI", - Channel::Preview => "GalaxyAIPreview", + Channel::Stable => "Galaxy", + Channel::Preview => "GalaxyPreview", Channel::Local => "galaxy-ai", Channel::Integration => "integration", - Channel::Dev => "GalaxyAIDev", + Channel::Dev => "GalaxyDev", Channel::Oss => "galaxy-ai-oss", } } diff --git a/app/src/bin/channel_config.rs b/app/src/bin/channel_config.rs deleted file mode 100644 index 76bf44dc..00000000 --- a/app/src/bin/channel_config.rs +++ /dev/null @@ -1,101 +0,0 @@ -//! Tools for loading a [`ChannelConfig`] from the external config generator binary. -//! -//! For non-bundled builds, the generator is invoked at runtime. For bundled builds, the config -//! is embedded at compile time via the build script. -use galaxy_core::channel::ChannelConfig; - -/// The name of the config generator binary, expected to be on PATH. -const CONFIG_BIN_NAME: &str = "warp-channel-config"; - -#[macro_export] -#[cfg(windows)] -macro_rules! path_concat { - ($path:expr, $file:expr) => { - concat!($path, "\\", $file) - }; -} -#[macro_export] -#[cfg(not(windows))] -macro_rules! path_concat { - ($path:expr, $file:expr) => { - concat!($path, "/", $file) - }; -} - -#[macro_export] -macro_rules! load_config { - ($channel:expr) => {{ - #[cfg(feature = "release_bundle")] - { - channel_config::load_config_from_embedded(include_str!($crate::path_concat!( - env!("OUT_DIR"), - concat!($channel, "_config.json") - ))) - } - - #[cfg(not(feature = "release_bundle"))] - { - channel_config::load_config_from_generator($channel) - } - }}; -} -pub use load_config; - -/// Invokes the config generator binary at runtime and deserializes its JSON output into a -/// [`ChannelConfig`]. -#[cfg_attr(feature = "release_bundle", expect(dead_code))] -pub fn load_config_from_generator(channel: &str) -> ChannelConfig { - let target_family = if cfg!(target_family = "wasm") { - "wasm" - } else { - "native" - }; - - let target_os = if cfg!(target_os = "macos") { - "macos" - } else if cfg!(target_os = "windows") { - "windows" - } else { - "linux" - }; - - let output = command::blocking::Command::new(CONFIG_BIN_NAME) - .arg("--channel") - .arg(channel) - .arg("--target-family") - .arg(target_family) - .arg("--target-os") - .arg(target_os) - .output() - .unwrap_or_else(|err| { - if err.kind() == std::io::ErrorKind::NotFound { - panic!( - "\n\n'{CONFIG_BIN_NAME}' was not found on PATH.\n\n\ - To build internal channels, run:\n\ - \n\ - \x20 ./script/install_channel_config\n\n" - ) - } - panic!("Failed to execute '{CONFIG_BIN_NAME}': {err}") - }); - - if !output.status.success() { - let stderr = String::from_utf8_lossy(&output.stderr); - panic!("Config generator failed for channel '{channel}':\n{stderr}"); - } - - serde_json::from_slice(&output.stdout).unwrap_or_else(|err| { - let stdout = String::from_utf8_lossy(&output.stdout); - panic!("Failed to parse config generator output for channel '{channel}': {err}\nOutput:\n{stdout}") - }) -} - -/// Deserializes a [`ChannelConfig`] from a JSON string embedded at compile time. -/// -/// This is used to load the channel configuration in release bundles, where configuration -/// is embedded at compile time instead of being generated at runtime. -#[cfg_attr(not(feature = "release_bundle"), expect(dead_code))] -pub fn load_config_from_embedded(json: &str) -> ChannelConfig { - serde_json::from_str(json) - .unwrap_or_else(|err| panic!("Failed to parse embedded channel config: {err}")) -} diff --git a/app/src/bin/dev.rs b/app/src/bin/dev.rs index e80f34ce..4294b583 100644 --- a/app/src/bin/dev.rs +++ b/app/src/bin/dev.rs @@ -2,22 +2,30 @@ // builds. See https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute. #![cfg_attr(feature = "release_bundle", windows_subsystem = "windows")] -#[path = "channel_config.rs"] -mod channel_config; - use anyhow::Result; use galaxy_core::{ - channel::{Channel, ChannelState}, - features, + channel::{Channel, ChannelConfig, ChannelState, OzConfig, WarpServerConfig}, + features, AppId, }; -// Simple wrapper around galaxy::run() for dev channel builds. fn main() -> Result<()> { ChannelState::set( - ChannelState::new(Channel::Dev, channel_config::load_config!("dev")) - .with_additional_features(features::DEBUG_FLAGS) - .with_additional_features(features::DOGFOOD_FLAGS) - .with_additional_features(features::PREVIEW_FLAGS), + ChannelState::new( + Channel::Dev, + ChannelConfig { + app_id: AppId::new("com", "samsung", "Galaxy-Dev"), + logfile_name: "galaxy.log".into(), + server_config: WarpServerConfig::production(), + oz_config: OzConfig::production(), + telemetry_config: None, + crash_reporting_config: None, + autoupdate_config: None, + mcp_static_config: None, + }, + ) + .with_additional_features(features::DEBUG_FLAGS) + .with_additional_features(features::DOGFOOD_FLAGS) + .with_additional_features(features::PREVIEW_FLAGS), ); galaxy::run() diff --git a/app/src/bin/local.rs b/app/src/bin/local.rs index 809e013a..adb173ee 100644 --- a/app/src/bin/local.rs +++ b/app/src/bin/local.rs @@ -1,19 +1,26 @@ -#[path = "channel_config.rs"] -mod channel_config; - use anyhow::Result; use galaxy_core::{ - channel::{Channel, ChannelState}, - features, + channel::{Channel, ChannelConfig, ChannelState, OzConfig, WarpServerConfig}, + features, AppId, }; fn main() -> Result<()> { - let config = channel_config::load_config!("local"); - - let mut state = ChannelState::new(Channel::Local, config) - .with_additional_features(features::DEBUG_FLAGS) - .with_additional_features(features::DOGFOOD_FLAGS) - .with_additional_features(features::PREVIEW_FLAGS); + let mut state = ChannelState::new( + Channel::Local, + ChannelConfig { + app_id: AppId::new("com", "samsung", "Galaxy-Local"), + logfile_name: "galaxy.log".into(), + server_config: WarpServerConfig::production(), + oz_config: OzConfig::production(), + telemetry_config: None, + crash_reporting_config: None, + autoupdate_config: None, + mcp_static_config: None, + }, + ) + .with_additional_features(features::DEBUG_FLAGS) + .with_additional_features(features::DOGFOOD_FLAGS) + .with_additional_features(features::PREVIEW_FLAGS); // Enable sandbox telemetry feature flag if the env var is set. if std::env::var("WITH_SANDBOX_TELEMETRY").is_ok() { @@ -37,9 +44,9 @@ embed_plist::embed_info_plist_bytes!(r#" CFBundleDisplayName Galaxy CFBundleExecutable - galaxy-ai + galaxy-local CFBundleIdentifier - com.samsung.GalaxyAI-Local + com.samsung.Galaxy-Local CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/app/src/bin/oss.rs b/app/src/bin/oss.rs index 5967dc69..a50181e7 100644 --- a/app/src/bin/oss.rs +++ b/app/src/bin/oss.rs @@ -12,8 +12,8 @@ fn main() -> Result<()> { let mut state = ChannelState::new( Channel::Oss, ChannelConfig { - app_id: AppId::new("com", "samsung", "GalaxyAI"), - logfile_name: "galaxy-ai.log".into(), + app_id: AppId::new("com", "samsung", "Galaxy"), + logfile_name: "galaxy.log".into(), server_config: WarpServerConfig::production(), oz_config: OzConfig::production(), telemetry_config: None, @@ -41,9 +41,9 @@ embed_plist::embed_info_plist_bytes!(r#" CFBundleDisplayName Galaxy CFBundleExecutable - galaxy-ai-oss + galaxy-oss CFBundleIdentifier - com.samsung.GalaxyAI + com.samsung.Galaxy CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/app/src/bin/preview.rs b/app/src/bin/preview.rs index f952af84..214cd48a 100644 --- a/app/src/bin/preview.rs +++ b/app/src/bin/preview.rs @@ -2,21 +2,28 @@ // builds. See https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute. #![cfg_attr(feature = "release_bundle", windows_subsystem = "windows")] -#[path = "channel_config.rs"] -mod channel_config; - use anyhow::Result; use galaxy_core::{ - channel::{Channel, ChannelState}, - features, + channel::{Channel, ChannelConfig, ChannelState, OzConfig, WarpServerConfig}, + features, AppId, }; -// Simple wrapper around galaxy::run() for feature preview channel builds. fn main() -> Result<()> { ChannelState::set( - ChannelState::new(Channel::Preview, channel_config::load_config!("preview")) - .with_additional_features(features::PREVIEW_FLAGS) - .with_additional_features(&[features::FeatureFlag::ForceLogin]), + ChannelState::new( + Channel::Preview, + ChannelConfig { + app_id: AppId::new("com", "samsung", "Galaxy-Preview"), + logfile_name: "galaxy.log".into(), + server_config: WarpServerConfig::production(), + oz_config: OzConfig::production(), + telemetry_config: None, + crash_reporting_config: None, + autoupdate_config: None, + mcp_static_config: None, + }, + ) + .with_additional_features(features::PREVIEW_FLAGS), ); galaxy::run() diff --git a/app/src/bin/stable.rs b/app/src/bin/stable.rs index bbdf8f9b..53a7281e 100644 --- a/app/src/bin/stable.rs +++ b/app/src/bin/stable.rs @@ -2,17 +2,25 @@ // builds. See https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute. #![cfg_attr(feature = "release_bundle", windows_subsystem = "windows")] -#[path = "channel_config.rs"] -mod channel_config; - use anyhow::Result; -use galaxy_core::channel::{Channel, ChannelState}; +use galaxy_core::{ + channel::{Channel, ChannelConfig, ChannelState, OzConfig, WarpServerConfig}, + AppId, +}; -// Simple wrapper around galaxy::run() for stable channel builds. fn main() -> Result<()> { ChannelState::set(ChannelState::new( Channel::Stable, - channel_config::load_config!("stable"), + ChannelConfig { + app_id: AppId::new("com", "samsung", "Galaxy"), + logfile_name: "galaxy.log".into(), + server_config: WarpServerConfig::production(), + oz_config: OzConfig::production(), + telemetry_config: None, + crash_reporting_config: None, + autoupdate_config: None, + mcp_static_config: None, + }, )); galaxy::run() diff --git a/app/src/drive/index.rs b/app/src/drive/index.rs index 10c199b2..bf89ff96 100644 --- a/app/src/drive/index.rs +++ b/app/src/drive/index.rs @@ -654,18 +654,7 @@ impl DriveIndex { .map(|space| DriveIndexSection::Space(*space)) .collect::>(); - if !user_workspaces.as_ref(ctx).has_teams() { - if user_workspaces - .as_ref(ctx) - .total_teammates_in_joinable_teams() - > 0 - { - sections.insert(0, DriveIndexSection::JoinTeam); - sections.insert(1, DriveIndexSection::CreateATeam); - } else { - sections.insert(0, DriveIndexSection::CreateATeam); - } - } + // Team creation/joining removed — Galaxy operates without Warp's team API. // Item UI state is attached by index, not by id, so this is re-initialized whenever there's any type of change let item_mouse_states = num_cloud_objects_per_space diff --git a/app/src/search/slash_command_menu/static_commands/commands.rs b/app/src/search/slash_command_menu/static_commands/commands.rs index 1448166b..e3fe370c 100644 --- a/app/src/search/slash_command_menu/static_commands/commands.rs +++ b/app/src/search/slash_command_menu/static_commands/commands.rs @@ -378,15 +378,6 @@ pub const USAGE: StaticCommand = StaticCommand { argument: None, }; -pub const REMOTE_CONTROL: StaticCommand = StaticCommand { - name: "/remote-control", - description: "Start remote control for this session", - icon_path: "bundled/svg/phone-01.svg", - availability: Availability::AI_ENABLED, - auto_enter_ai_mode: false, - argument: None, -}; - pub const COST: StaticCommand = StaticCommand { name: "/cost", description: "Toggle credit usage details", @@ -536,12 +527,6 @@ fn all_commands() -> Vec { commands.push(CREATE_DOCKER_SANDBOX); } - if FeatureFlag::CreatingSharedSessions.is_enabled() - && FeatureFlag::HOARemoteControl.is_enabled() - { - commands.push(REMOTE_CONTROL); - } - if FeatureFlag::Changelog.is_enabled() { commands.push(CHANGELOG); } diff --git a/app/src/settings_view/about_page.rs b/app/src/settings_view/about_page.rs index dbc93a5f..87cdac55 100644 --- a/app/src/settings_view/about_page.rs +++ b/app/src/settings_view/about_page.rs @@ -6,7 +6,7 @@ use super::{ SettingsSection, }; use crate::{ - appearance::Appearance, channel::ChannelState, themes::theme::ColorScheme, + appearance::Appearance, channel::ChannelState, workspace::WorkspaceAction, }; use galaxyui::{ @@ -66,11 +66,7 @@ impl SettingsWidget for AboutPageWidget { let theme = appearance.theme(); let ui_builder = appearance.ui_builder(); - let image_path = if theme.inferred_color_scheme() == ColorScheme::LightOnDark { - "bundled/svg/bedrock.svg" - } else { - "bundled/svg/bedrock.svg" - }; + let image_path = "bundled/svg/galaxy-logo.svg"; let version = ChannelState::app_version() .unwrap_or(concat!("v", env!("CARGO_PKG_VERSION"))); diff --git a/app/src/settings_view/mod.rs b/app/src/settings_view/mod.rs index 43b801e2..7d80e172 100644 --- a/app/src/settings_view/mod.rs +++ b/app/src/settings_view/mod.rs @@ -239,7 +239,7 @@ impl Display for SettingsSection { SettingsSection::Knowledge => write!(f, "Knowledge"), SettingsSection::ThirdPartyCLIAgents => write!(f, "Third party CLI agents"), SettingsSection::Bedrock => write!(f, "AWS Bedrock"), - SettingsSection::Warpify => write!(f, "Galaxify"), + SettingsSection::Warpify => write!(f, "Galaxyize"), SettingsSection::CodeIndexing => write!(f, "Indexing and projects"), SettingsSection::EditorAndCodeReview => write!(f, "Editor and Code Review"), _ => write!(f, "{self:?}"), @@ -318,7 +318,7 @@ impl FromStr for SettingsSection { "Features" => Ok(Self::Features), "Keyboard shortcuts" => Ok(Self::Keybindings), "Privacy" => Ok(Self::Privacy), - "Warpify" | "Galaxify" => Ok(Self::Warpify), + "Warpify" | "Galaxyize" => Ok(Self::Warpify), "WarpDrive" | "Warp Drive" | "Galaxy Drive" => Ok(Self::WarpDrive), // This page was called "Oz" at one point, keep for backward compatibility. "Oz" | "Warp Agent" | "Galaxy Agent" => Ok(Self::WarpAgent), diff --git a/app/src/settings_view/warpify_page.rs b/app/src/settings_view/warpify_page.rs index 2e7276e6..7650a824 100644 --- a/app/src/settings_view/warpify_page.rs +++ b/app/src/settings_view/warpify_page.rs @@ -185,7 +185,7 @@ impl WarpifyPageView { { categories.push( Category::new("SSH", vec![Box::new(SSHWidget::default())]) - .with_subtitle("Galaxify your interactive SSH sessions."), + .with_subtitle("Galaxyize your interactive SSH sessions."), ); } PageType::new_categorized(categories, None) @@ -532,7 +532,7 @@ impl TitleWidget { fn render_top_of_page(&self, appearance: &Appearance, _app: &AppContext) -> Box { let warpify_description = vec![ FormattedTextFragment::plain_text( - "Configure whether Galaxy attempts to \u{201c}Galaxify\u{201d} (add support for blocks, \ + "Configure whether Galaxy attempts to \u{201c}Galaxyize\u{201d} (add support for blocks, \ input modes, etc) certain shells. ", ), FormattedTextFragment::hyperlink( @@ -556,7 +556,7 @@ impl TitleWidget { .finish(); Flex::column() - .with_child(render_page_title("Galaxify", HEADER_FONT_SIZE, appearance)) + .with_child(render_page_title("Galaxyize", HEADER_FONT_SIZE, appearance)) .with_child(warpify_description) .finish() } @@ -682,7 +682,7 @@ impl SettingsWidget for SSHWidget { &WarpifySettings::as_ref(app).enable_ssh_warpification, move || { render_body_item::( - "Galaxify SSH Sessions".into(), + "Galaxyize SSH Sessions".into(), None, LocalOnlyIconState::for_setting( EnableSshWarpification::storage_key(), diff --git a/app/src/terminal/input.rs b/app/src/terminal/input.rs index 827636cf..f099148e 100644 --- a/app/src/terminal/input.rs +++ b/app/src/terminal/input.rs @@ -2201,10 +2201,6 @@ impl Input { AgentInputFooterEvent::OpenRichInput | AgentInputFooterEvent::HideRichInput => { ctx.emit(Event::Escape); } - AgentInputFooterEvent::StartRemoteControl - | AgentInputFooterEvent::StopRemoteControl => { - // Handled by UseAgentToolbar's subscription, not here. - } // WriteToPty, InsertIntoCLIRichInput, ToggleCodeReviewPane, and ToggleFileExplorer // are handled by UseAgentToolbar's subscription, not here. AgentInputFooterEvent::WriteToPty(_) diff --git a/app/src/terminal/input/slash_commands/mod.rs b/app/src/terminal/input/slash_commands/mod.rs index e2f8bbf1..514510ef 100644 --- a/app/src/terminal/input/slash_commands/mod.rs +++ b/app/src/terminal/input/slash_commands/mod.rs @@ -674,23 +674,6 @@ impl Input { _usage if command.name == commands::USAGE.name => { ctx.dispatch_typed_action(&TerminalAction::OpenBillingAndUsagePane); } - _remote_control if command.name == commands::REMOTE_CONTROL.name => { - if !FeatureFlag::CreatingSharedSessions.is_enabled() - || !FeatureFlag::HOARemoteControl.is_enabled() - { - return false; - } - if self - .model - .lock() - .shared_session_status() - .is_sharer_or_viewer() - { - show_error_toast("Session is already being shared".to_owned(), ctx); - return true; - } - ctx.emit(Event::StartRemoteControl); - } _cost if command.name == commands::COST.name => { let history = BlocklistAIHistoryModel::handle(ctx); let conversation = history diff --git a/app/src/terminal/ssh/error.rs b/app/src/terminal/ssh/error.rs index e9eeb261..39999737 100644 --- a/app/src/terminal/ssh/error.rs +++ b/app/src/terminal/ssh/error.rs @@ -35,7 +35,7 @@ const UNSUPPORTED_TMUX_VERSION_ERROR: &str = "The tmux version available on the remote machine is below 3.0. Please install tmux 3.0 or greater using a different method and try again."; const TMUX_FAILED_ERROR: &str = "tmux failed to execute on the remote machine. Please re-install tmux and try again."; -const WARPIFY_TIMEOUT_ERROR: &str = "Galaxifying the session hit a timeout."; +const WARPIFY_TIMEOUT_ERROR: &str = "Galaxyizeing the session hit a timeout."; const UNSUPPORTED_SHELL_ERROR: &str = "Unsupported shell. Please set bash, zsh, or fish as your default shell and try again."; const TMUX_INSTALL_FAILED_ERROR: &str = @@ -258,7 +258,7 @@ impl View for SshErrorBlock { ButtonVariant::Accent, self.warpify_without_tmux_button_mouse_state.clone(), ) - .with_centered_text_label("Galaxify without TMUX".into()) + .with_centered_text_label("Galaxyize without TMUX".into()) .with_style(UiComponentStyles { font_size: Some(appearance.monospace_font_size()), ..Default::default() diff --git a/app/src/terminal/ssh/warpify.rs b/app/src/terminal/ssh/warpify.rs index 809dc308..884590a4 100644 --- a/app/src/terminal/ssh/warpify.rs +++ b/app/src/terminal/ssh/warpify.rs @@ -67,7 +67,7 @@ impl Entity for SshWarpifyBlock { impl SshWarpifyBlock { fn render_title_ui(&self, theme: &WarpTheme, appearance: &Appearance) -> Box { let icon = Icon::new(UiIcon::Warp.into(), theme.active_ui_detail()); - warpify::render::header_row("Galaxifying SSH Session...", icon, theme, appearance) + warpify::render::header_row("Galaxyizeing SSH Session...", icon, theme, appearance) } } diff --git a/app/src/terminal/view/block_banner/warpify.rs b/app/src/terminal/view/block_banner/warpify.rs index d8a372de..256498dd 100644 --- a/app/src/terminal/view/block_banner/warpify.rs +++ b/app/src/terminal/view/block_banner/warpify.rs @@ -97,8 +97,8 @@ impl WarpifyBannerState { pub fn title(&self) -> &str { match &self.mode { - WarpificationMode::Ssh { .. } => "Galaxify SSH session", - WarpificationMode::Subshell { .. } => "Galaxify subshell", + WarpificationMode::Ssh { .. } => "Galaxyize SSH session", + WarpificationMode::Subshell { .. } => "Galaxyize subshell", } } diff --git a/app/src/terminal/view/init.rs b/app/src/terminal/view/init.rs index 2f093ff4..41ee93e3 100644 --- a/app/src/terminal/view/init.rs +++ b/app/src/terminal/view/init.rs @@ -341,7 +341,7 @@ pub fn init(app: &mut AppContext) { ), EditableBinding::new( "terminal:warpify_subshell", - "Galaxify subshell", + "Galaxyize subshell", TerminalAction::TriggerSubshellBootstrap, ) .with_key_binding("ctrl-i") @@ -350,7 +350,7 @@ pub fn init(app: &mut AppContext) { ), EditableBinding::new( "terminal:warpify_ssh_session", - "Galaxify ssh session", + "Galaxyize ssh session", TerminalAction::WarpifySSHSession, ) .with_key_binding("ctrl-i") diff --git a/app/src/terminal/view/use_agent_footer/mod.rs b/app/src/terminal/view/use_agent_footer/mod.rs index b7fa1fe7..11cb18ef 100644 --- a/app/src/terminal/view/use_agent_footer/mod.rs +++ b/app/src/terminal/view/use_agent_footer/mod.rs @@ -9,9 +9,7 @@ use crate::ai::blocklist::agent_view::agent_input_footer::{ AgentInputFooter, AgentInputFooterEvent, }; use crate::terminal::cli_agent_sessions::{CLIAgentInputEntrypoint, CLIAgentSessionsModel}; -use crate::terminal::shared_session::{SharedSessionActionSource, SharedSessionScrollbackType}; use base64::Engine; -use session_sharing_protocol::sharer::SessionSourceType; use galaxyui::clipboard::{ClipboardContent, ImageData}; mod warpify_footer; @@ -231,21 +229,6 @@ impl TerminalView { UseAgentToolbarEvent::ToggleFileExplorer(cli_agent) => { self.toggle_file_tree(Some((*cli_agent).into()), ctx); } - UseAgentToolbarEvent::StartRemoteControl { scrollback_type } => { - self.auto_stop_sharing_on_cli_end = - *scrollback_type == SharedSessionScrollbackType::None; - self.attempt_to_share_session( - *scrollback_type, - Some(SharedSessionActionSource::FooterChip), - SessionSourceType::default(), - true, - ctx, - ); - } - UseAgentToolbarEvent::StopRemoteControl => { - self.auto_stop_sharing_on_cli_end = false; - self.stop_sharing_session(SharedSessionActionSource::FooterChip, ctx); - } UseAgentToolbarEvent::OpenRichInput => { if self.has_active_cli_agent_input_session(ctx) { self.close_cli_agent_rich_input_and_disable_auto_toggle(ctx); @@ -1074,17 +1057,6 @@ impl UseAgentToolbar { AgentInputFooterEvent::ToggleFileExplorer(agent) => { ctx.emit(UseAgentToolbarEvent::ToggleFileExplorer(*agent)); } - AgentInputFooterEvent::StartRemoteControl => { - let scrollback_type = if self.cli_agent(ctx).is_some() { - SharedSessionScrollbackType::None - } else { - SharedSessionScrollbackType::All - }; - ctx.emit(UseAgentToolbarEvent::StartRemoteControl { scrollback_type }); - } - AgentInputFooterEvent::StopRemoteControl => { - ctx.emit(UseAgentToolbarEvent::StopRemoteControl); - } AgentInputFooterEvent::OpenRichInput => { ctx.emit(UseAgentToolbarEvent::OpenRichInput); } @@ -1182,12 +1154,6 @@ pub enum UseAgentToolbarEvent { ToggleCodeReviewPane(CLIAgent), /// Toggle the file explorer (from CLI agent view). ToggleFileExplorer(CLIAgent), - /// Start remote control (one-click share without modal). - StartRemoteControl { - scrollback_type: SharedSessionScrollbackType, - }, - /// Stop remote control (stop the active shared session). - StopRemoteControl, /// Open the rich input editor for composing a prompt. OpenRichInput, /// Hide the rich input editor (same as Escape). diff --git a/app/src/terminal/view/use_agent_footer/warpify_footer.rs b/app/src/terminal/view/use_agent_footer/warpify_footer.rs index 9edd1581..5ed921fe 100644 --- a/app/src/terminal/view/use_agent_footer/warpify_footer.rs +++ b/app/src/terminal/view/use_agent_footer/warpify_footer.rs @@ -33,7 +33,7 @@ impl WarpifyFooterView { let button_size = ButtonSize::XSmall; let warpify_button = ctx.add_typed_action_view(|_ctx| { - ActionButton::new("Galaxify subshell", AgentFooterButtonTheme::new(None)) + ActionButton::new("Galaxyize subshell", AgentFooterButtonTheme::new(None)) .with_icon(Icon::Warp) .with_size(button_size) .with_tooltip("Enable Galaxy shell integration in this session") @@ -76,9 +76,9 @@ impl WarpifyFooterView { pub fn set_mode(&mut self, mode: WarpificationMode, ctx: &mut ViewContext) { let (label, binding_name) = match mode { WarpificationMode::Ssh { .. } => { - ("Galaxify SSH session", "terminal:warpify_ssh_session") + ("Galaxyize SSH session", "terminal:warpify_ssh_session") } - WarpificationMode::Subshell { .. } => ("Galaxify subshell", "terminal:warpify_subshell"), + WarpificationMode::Subshell { .. } => ("Galaxyize subshell", "terminal:warpify_subshell"), }; self.warpify_button.update(ctx, |button, ctx| { button.set_label(label, ctx); diff --git a/app/src/workspace/view.rs b/app/src/workspace/view.rs index cdf1e44d..9d7a2831 100644 --- a/app/src/workspace/view.rs +++ b/app/src/workspace/view.rs @@ -17327,37 +17327,11 @@ impl Workspace { ); } - if FeatureFlag::AvatarInTabBar.is_enabled() { - let resource_center_closed = !self.current_workspace_state.is_resource_center_open; - if resource_center_closed && ContextFlag::WarpEssentials.is_enabled() { - target.add_child( - Container::new(self.render_resource_center_button(appearance, ctx)) - .with_margin_left(TAB_BAR_PADDING_LEFT) - .finish(), - ); - } - - target.add_child( - Container::new(self.render_settings_button(appearance)) - .with_margin_left(TAB_BAR_PADDING_LEFT) - .finish(), - ); - } else { - let resource_center_closed = !self.current_workspace_state.is_resource_center_open; - if resource_center_closed && ContextFlag::WarpEssentials.is_enabled() { - target.add_child( - Container::new(self.render_resource_center_button(appearance, ctx)) - .with_margin_left(TAB_BAR_PADDING_LEFT) - .finish(), - ); - } - - target.add_child( - Container::new(self.render_settings_button(appearance)) - .with_margin_left(TAB_BAR_PADDING_LEFT) - .finish(), - ); - } + target.add_child( + Container::new(self.render_settings_button(appearance)) + .with_margin_left(TAB_BAR_PADDING_LEFT) + .finish(), + ); if self.auth_state.is_anonymous_or_logged_out() && !FeatureFlag::OpenWarpNewSettingsModes.is_enabled() @@ -17798,7 +17772,7 @@ impl Workspace { Align::new( self.render_tab_bar_icon_button( appearance, - icons::Icon::Gear, + icons::Icon::Stars, &self.mouse_states.settings_icon, WorkspaceAction::ShowSettings, "Settings".to_string(), diff --git a/channels/oss/icon/no-padding/512x512.png b/channels/oss/icon/no-padding/512x512.png new file mode 100644 index 00000000..15f09954 Binary files /dev/null and b/channels/oss/icon/no-padding/512x512.png differ diff --git a/crates/galaxy_core/src/paths.rs b/crates/galaxy_core/src/paths.rs index 931d4c21..d9b640b7 100644 --- a/crates/galaxy_core/src/paths.rs +++ b/crates/galaxy_core/src/paths.rs @@ -28,7 +28,7 @@ use crate::{ /// /// This should be used, for example, as the base directory under which /// repository workflows would be stored (in "./.warp-core/workflows"). -pub const WARP_CONFIG_DIR: &str = ".galaxy-ai"; +pub const WARP_CONFIG_DIR: &str = ".galaxy"; /// The legacy config directory name used by Warp before the rename to Warp Core. /// Used for auto-migration on first launch. diff --git a/script/linux/bundle b/script/linux/bundle index 55261264..dc0d0cc6 100755 --- a/script/linux/bundle +++ b/script/linux/bundle @@ -152,13 +152,13 @@ mkdir -p "$OUT_DIR" if [[ $RELEASE_CHANNEL = "local" ]]; then WARP_BIN="warp" BINARY_NAME="warp-local" - APP_NAME="WarpLocal" + APP_NAME="GalaxyLocal" FEATURES="$FEATURES,agent_mode_debug" export HANDLE_MARKDOWN=1 elif [[ $RELEASE_CHANNEL = "dev" ]]; then WARP_BIN="dev" BINARY_NAME="warp-dev" - APP_NAME="WarpDev" + APP_NAME="GalaxyDev" FEATURES="$FEATURES,agent_mode_debug" # Enable heap profiling using jemalloc through pprof. FEATURES="$FEATURES,jemalloc_pprof" @@ -166,16 +166,16 @@ elif [[ $RELEASE_CHANNEL = "dev" ]]; then elif [[ $RELEASE_CHANNEL = "preview" ]]; then WARP_BIN="preview" BINARY_NAME="warp-preview" - APP_NAME="WarpPreview" + APP_NAME="GalaxyPreview" FEATURES="$FEATURES,preview_channel" elif [[ $RELEASE_CHANNEL = "stable" ]]; then WARP_BIN="stable" BINARY_NAME="warp" - APP_NAME="Warp" + APP_NAME="Galaxy" elif [[ $RELEASE_CHANNEL = "oss" ]]; then WARP_BIN="warp-oss" BINARY_NAME="warp-oss" - APP_NAME="WarpOss" + APP_NAME="GalaxyOss" # The OSS channel does not ship Sentry, so drop the crash_reporting feature # (which would otherwise pull in the Sentry SDK as a dependency). FEATURES="release_bundle" diff --git a/script/macos/bundle b/script/macos/bundle index bad6ad7e..a4e515b8 100755 --- a/script/macos/bundle +++ b/script/macos/bundle @@ -270,9 +270,9 @@ fi if [[ $RELEASE_CHANNEL = "local" ]]; then WARP_BIN="galaxy-ai" - BUNDLE_ID="com.samsung.GalaxyAI-Local" - WARP_APP_NAME="GalaxyAI" - WARP_SCHEME_NAME="galaxyai" + BUNDLE_ID="com.samsung.Galaxy-Local" + WARP_APP_NAME="Galaxy" + WARP_SCHEME_NAME="galaxy" FEATURES="$FEATURES,agent_mode_debug" # For local builds, use different versions of our bundled frameworks (e.g.: # Sentry). This needs to be exported so it can be referenced by @@ -280,9 +280,9 @@ if [[ $RELEASE_CHANNEL = "local" ]]; then export FRAMEWORK_OVERRIDE="dev" elif [[ $RELEASE_CHANNEL = "dev" ]]; then WARP_BIN="dev" - BUNDLE_ID="com.samsung.GalaxyAI-Dev" - WARP_APP_NAME="GalaxyAIDev" - WARP_SCHEME_NAME="galaxyaidev" + BUNDLE_ID="com.samsung.Galaxy-Dev" + WARP_APP_NAME="GalaxyDev" + WARP_SCHEME_NAME="galaxydev" FEATURES="$FEATURES,agent_mode_debug" # Enable heap usage tracking & profiling using jemalloc through pprof. FEATURES="$FEATURES,jemalloc_pprof,heap_usage_tracking" @@ -293,22 +293,22 @@ elif [[ $RELEASE_CHANNEL = "dev" ]]; then export HANDLE_MARKDOWN=1 elif [[ $RELEASE_CHANNEL = "preview" ]]; then WARP_BIN="preview" - BUNDLE_ID="com.samsung.GalaxyAI-Preview" - WARP_APP_NAME="GalaxyAIPreview" - WARP_SCHEME_NAME="galaxyaipreview" + BUNDLE_ID="com.samsung.Galaxy-Preview" + WARP_APP_NAME="GalaxyPreview" + WARP_SCHEME_NAME="galaxypreview" FEATURES="$FEATURES,preview_channel" # Enable heap usage tracking & profiling using jemalloc through pprof. FEATURES="$FEATURES,jemalloc_pprof,heap_usage_tracking" elif [[ $RELEASE_CHANNEL = "stable" ]]; then WARP_BIN="stable" - BUNDLE_ID="com.samsung.GalaxyAI" - WARP_APP_NAME="GalaxyAI" - WARP_SCHEME_NAME="galaxyai" + BUNDLE_ID="com.samsung.Galaxy" + WARP_APP_NAME="Galaxy" + WARP_SCHEME_NAME="galaxy" elif [[ $RELEASE_CHANNEL = "oss" ]]; then WARP_BIN="galaxy-ai-oss" - BUNDLE_ID="com.samsung.GalaxyAI" - WARP_APP_NAME="GalaxyAI" - WARP_SCHEME_NAME="galaxyai" + BUNDLE_ID="com.samsung.Galaxy" + WARP_APP_NAME="Galaxy" + WARP_SCHEME_NAME="galaxy" # The OSS channel does not ship Sentry, so drop the cocoa_sentry feature # (which would otherwise pull in the Sentry framework dependency). FEATURES="release_bundle,extern_plist" diff --git a/script/windows/bundle.ps1 b/script/windows/bundle.ps1 index 872a75d6..dda9f795 100644 --- a/script/windows/bundle.ps1 +++ b/script/windows/bundle.ps1 @@ -91,28 +91,28 @@ $BUNDLE_ID = "dev.warp.$app_name" if ("$CHANNEL" -eq 'local') { $WARP_BIN = 'warp' $BINARY_NAME = 'warp.exe' - $APP_NAME = 'WarpLocal' + $APP_NAME = 'GalaxyLocal' $FEATURES = "$FEATURES,nld_improvements" } elseif ("$CHANNEL" -eq 'dev') { $WARP_BIN = 'dev' $BINARY_NAME = 'dev.exe' - $APP_NAME = 'WarpDev' + $APP_NAME = 'GalaxyDev' $FEATURES = "$FEATURES,agent_mode_debug,nld_improvements" } elseif ("$CHANNEL" -eq 'preview') { $WARP_BIN = 'preview' $BINARY_NAME = 'preview.exe' - $APP_NAME = 'WarpPreview' + $APP_NAME = 'GalaxyPreview' $FEATURES = "$FEATURES,preview_channel,nld_improvements" } elseif ("$CHANNEL" -eq 'stable') { $WARP_BIN = 'stable' $BINARY_NAME = 'warp.exe' - $APP_NAME = 'Warp' + $APP_NAME = 'Galaxy' # TODO(vorporeal): Remove this once we get tests passing with this default enabled. $FEATURES = "$FEATURES,nld_improvements" } elseif ("$CHANNEL" -eq 'oss') { $WARP_BIN = 'warp-oss' $BINARY_NAME = 'warp-oss.exe' - $APP_NAME = 'WarpOss' + $APP_NAME = 'GalaxyOss' # The OSS channel does not ship Sentry, so drop the crash_reporting feature # (which would otherwise pull in the Sentry SDK as a dependency). $FEATURES = 'release_bundle,gui,nld_improvements' diff --git a/script/windows/windows-installer.iss b/script/windows/windows-installer.iss index 63f6f578..f14bc6df 100644 --- a/script/windows/windows-installer.iss +++ b/script/windows/windows-installer.iss @@ -5,7 +5,7 @@ #define MyAppPublisher "Denver Technologies, Inc." #define MyAppURL "https://www.warp.dev/" #ifndef MyAppName - #define MyAppName "WarpDev" + #define MyAppName "GalaxyDev" #endif #ifndef MyAppVersion #define MyAppVersion "0.1.0" @@ -130,7 +130,7 @@ Root: HKA; Subkey: "Software\Classes\Directory\Background\shell\{#MyAppName}Wind Root: HKA; Subkey: "Software\Classes\Directory\Background\shell\{#MyAppName}Window\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""{#MyAppName}://action/new_window?path=%V""" [Tasks] -Name: addToPath; Description: "Add Warp to PATH" +Name: addToPath; Description: "Add Galaxy to PATH" [UninstallDelete] Type: filesandordirs; Name: "{userappdata}\warp\{#MyAppName}"