Galaxy v1.0.0: Remove warp-channel-config, rebrand bins/icons/settings, remove teams from Drive
- Remove warp-channel-config dependency; all bin targets hardcode ChannelConfig inline - Rename bin targets: galaxy-oss, galaxy-local, galaxy-stable, galaxy-dev, galaxy-preview - Rename config dir from .galaxy-ai to .galaxy - Add Galaxy app icon (512x512 rounded PNG + SVG logo) - Replace settings gear icon with Stars (sparkle) icon - Remove lightbulb/resource center button from header toolbar - Add Galaxy logo SVG to Settings > About page - Rename Galaxify -> Galaxyize across all UI strings - Remove Create Team / Join Team sections from Galaxy Drive - Fix missing => in OpenRichInput match arms - Clean up unused imports and warnings - Update Cargo.toml bundle metadata with Samsung branding - Re-enable code review, project explorer, global search in settings
This commit is contained in:
@@ -55,3 +55,6 @@ desired_behavior.md
|
|||||||
|
|
||||||
# Don't include the python cache for bundled skills.
|
# Don't include the python cache for bundled skills.
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
|
||||||
|
# Local Warp upstream reference checkout (used by pull_warp_feature skill)
|
||||||
|
.galaxy/
|
||||||
|
|||||||
@@ -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/<feature>/`
|
||||||
|
- Project-scoped data: `.galaxy/<feature>/` (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 <crate_name>
|
||||||
|
```
|
||||||
|
|
||||||
|
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 <crate_name>
|
||||||
|
```
|
||||||
|
|
||||||
|
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" <changed_files>
|
||||||
|
grep -rn "api\.warp" <changed_files>
|
||||||
|
grep -rn "warpdotdev" <changed_files>
|
||||||
|
grep -rn "warp-server" <changed_files>
|
||||||
|
grep -rn "WARP_API" <changed_files>
|
||||||
|
grep -rn "warp_api" <changed_files>
|
||||||
|
```
|
||||||
|
|
||||||
|
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/<feature_name>/`
|
||||||
|
- **Project-scoped state**: `<project_root>/.galaxy/<feature_name>/` (must be gitignored)
|
||||||
|
- **Structured persistent data**: Use Diesel ORM + SQLite via `app/src/persistence/`
|
||||||
|
- **Cached/temporary data**: `$TMPDIR/galaxy_<feature_name>/`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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
|
||||||
@@ -160,6 +160,11 @@ When adding/editing match statements, avoid using the wildcard _ when at all pos
|
|||||||
- MCP config: `~/.galaxy-ai/.mcp.json`
|
- MCP config: `~/.galaxy-ai/.mcp.json`
|
||||||
- Environment variables use `GALAXY_` prefix (e.g., `GALAXY_API_KEY`, `GALAXY_INTEGRATION`)
|
- 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
|
## Future Work
|
||||||
|
|
||||||
### IDE-Level LSP Integration
|
### IDE-Level LSP Integration
|
||||||
|
|||||||
+30
-39
@@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
authors = ["Ryan Ward <ryan.ward@samsung.com>"]
|
authors = ["Ryan Ward <ryan.ward@samsung.com>"]
|
||||||
default-run = "galaxy-ai-oss"
|
default-run = "galaxy-oss"
|
||||||
description = "Galaxy AI - AI-powered terminal for development teams"
|
description = "Galaxy - AI-powered terminal"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
autobins = false
|
autobins = false
|
||||||
name = "galaxy"
|
name = "galaxy"
|
||||||
@@ -18,27 +18,27 @@ path = "src/lib.rs"
|
|||||||
# flag overrides). Otherwise these binaries are exactly identical to our main binary.
|
# flag overrides). Otherwise these binaries are exactly identical to our main binary.
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "galaxy-ai-oss"
|
name = "galaxy-oss"
|
||||||
path = "src/bin/oss.rs"
|
path = "src/bin/oss.rs"
|
||||||
test = false
|
test = false
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "galaxy-ai"
|
name = "galaxy-local"
|
||||||
path = "src/bin/local.rs"
|
path = "src/bin/local.rs"
|
||||||
test = false
|
test = false
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "stable"
|
name = "galaxy-stable"
|
||||||
path = "src/bin/stable.rs"
|
path = "src/bin/stable.rs"
|
||||||
test = false
|
test = false
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "dev"
|
name = "galaxy-dev"
|
||||||
path = "src/bin/dev.rs"
|
path = "src/bin/dev.rs"
|
||||||
test = false
|
test = false
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "preview"
|
name = "galaxy-preview"
|
||||||
path = "src/bin/preview.rs"
|
path = "src/bin/preview.rs"
|
||||||
required-features = ["preview_channel"]
|
required-features = ["preview_channel"]
|
||||||
test = false
|
test = false
|
||||||
@@ -932,55 +932,46 @@ codex_notifications = []
|
|||||||
cloud_mode_setup_v2 = ["cloud_mode"]
|
cloud_mode_setup_v2 = ["cloud_mode"]
|
||||||
cloud_mode_input_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"
|
category = "public.app-category.developer-tools"
|
||||||
copyright = "© 2025, Denver Technologies, Inc"
|
copyright = "© 2026, Samsung Electronics Co., Ltd."
|
||||||
identifier = "dev.galaxy.GalaxyOss"
|
identifier = "com.samsung.Galaxy"
|
||||||
name = "Galaxy"
|
name = "Galaxy"
|
||||||
resources = ["assets/onboarding"]
|
resources = ["assets/onboarding"]
|
||||||
icon = ["channels/oss/icon/no-padding/512x512.png", "channels/oss/icon/no-padding/icon.ico"]
|
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"
|
category = "public.app-category.developer-tools"
|
||||||
copyright = "© 2025, Denver Technologies, Inc"
|
copyright = "© 2026, Samsung Electronics Co., Ltd."
|
||||||
identifier = "dev.galaxy.Galaxy-Stable"
|
identifier = "com.samsung.Galaxy-Stable"
|
||||||
name = "Galaxy"
|
name = "Galaxy"
|
||||||
osx_frameworks = [
|
|
||||||
"frameworks/default/Sentry-Dynamic-WithARM64e.xcframework/macos-arm64_arm64e_x86_64/Sentry.framework",
|
|
||||||
]
|
|
||||||
resources = ["assets/onboarding"]
|
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"
|
category = "public.app-category.developer-tools"
|
||||||
copyright = "© 2025, Denver Technologies, Inc"
|
copyright = "© 2026, Samsung Electronics Co., Ltd."
|
||||||
identifier = "dev.galaxy.Galaxy-Preview"
|
identifier = "com.samsung.Galaxy-Preview"
|
||||||
name = "GalaxyPreview"
|
name = "Galaxy Preview"
|
||||||
osx_frameworks = [
|
|
||||||
"frameworks/default/Sentry-Dynamic-WithARM64e.xcframework/macos-arm64_arm64e_x86_64/Sentry.framework",
|
|
||||||
]
|
|
||||||
resources = ["assets/onboarding"]
|
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"
|
category = "public.app-category.developer-tools"
|
||||||
copyright = "© 2025, Denver Technologies, Inc"
|
copyright = "© 2026, Samsung Electronics Co., Ltd."
|
||||||
identifier = "dev.galaxy.Galaxy-Dev"
|
identifier = "com.samsung.Galaxy-Dev"
|
||||||
name = "GalaxyDev"
|
name = "Galaxy Dev"
|
||||||
osx_frameworks = [
|
|
||||||
"frameworks/dev/Sentry-Dynamic-WithARM64e.xcframework/macos-arm64_arm64e_x86_64/Sentry.framework",
|
|
||||||
]
|
|
||||||
resources = ["assets/onboarding"]
|
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"
|
category = "public.app-category.developer-tools"
|
||||||
copyright = "© 2025, Denver Technologies, Inc"
|
copyright = "© 2026, Samsung Electronics Co., Ltd."
|
||||||
identifier = "dev.galaxy.Galaxy-Local"
|
identifier = "com.samsung.Galaxy-Local"
|
||||||
name = "GalaxyLocal"
|
name = "Galaxy Local"
|
||||||
resources = ["assets/onboarding"]
|
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]
|
[package.metadata.cargo-udeps.ignore]
|
||||||
normal = ["embed_plist"]
|
normal = ["embed_plist"]
|
||||||
|
|||||||
@@ -3,11 +3,11 @@
|
|||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>com.samsung.GalaxyAIDockTilePlugin</string>
|
<string>com.samsung.GalaxyDockTilePlugin</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>WarpDockTilePlugin</string>
|
<string>WarpDockTilePlugin</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
<string>GalaxyAIDockTilePlugin</string>
|
<string>GalaxyDockTilePlugin</string>
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>BNDL</string>
|
<string>BNDL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 246 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 246 KiB |
@@ -0,0 +1,10 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 200">
|
||||||
|
<!-- Large star -->
|
||||||
|
<path d="M100 160 Q100 95 50 95 Q100 95 100 30 Q100 95 150 95 Q100 95 100 160Z" fill="#7cb8e4"/>
|
||||||
|
<!-- Medium star -->
|
||||||
|
<path d="M165 110 Q165 60 125 60 Q165 60 165 15 Q165 60 205 60 Q165 60 165 110Z" fill="#7cb8e4"/>
|
||||||
|
<!-- Small star -->
|
||||||
|
<path d="M225 80 Q225 50 200 50 Q225 50 225 20 Q225 50 250 50 Q225 50 225 80Z" fill="#7cb8e4"/>
|
||||||
|
<!-- Galaxy text -->
|
||||||
|
<text x="150" y="190" text-anchor="middle" font-family="-apple-system, BlinkMacSystemFont, sans-serif" font-size="28" font-weight="600" fill="#7cb8e4">Galaxy</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 624 B |
@@ -142,77 +142,9 @@ fn main() -> Result<()> {
|
|||||||
copy_async_assets();
|
copy_async_assets();
|
||||||
}
|
}
|
||||||
|
|
||||||
generate_channel_config_if_needed(&target_family, &target_os);
|
|
||||||
|
|
||||||
Ok(())
|
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 {
|
fn get_build_profile_name() -> String {
|
||||||
// The profile name is always the 3rd last part of the path (with 1 based indexing).
|
// 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
|
// e.g. /code/core/target/cli/build/my-build-info-9f91ba6f99d7a061/out
|
||||||
|
|||||||
@@ -290,7 +290,7 @@ static DEFAULT_TIPS: LazyLock<Vec<AgentTip>> = LazyLock::new(|| {
|
|||||||
kind: AgentTipKind::Context,
|
kind: AgentTipKind::Context,
|
||||||
},
|
},
|
||||||
AgentTip {
|
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()),
|
link: Some("https://docs.warp.dev/terminal/warpify".to_string()),
|
||||||
binding_name: None,
|
binding_name: None,
|
||||||
action: None,
|
action: None,
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ use crate::{
|
|||||||
AIRequestUsageModel,
|
AIRequestUsageModel,
|
||||||
},
|
},
|
||||||
appearance::Appearance,
|
appearance::Appearance,
|
||||||
auth::{AuthManager, AuthStateProvider},
|
|
||||||
completer::SessionContext,
|
completer::SessionContext,
|
||||||
context_chips::{
|
context_chips::{
|
||||||
self,
|
self,
|
||||||
@@ -84,11 +83,10 @@ use tokio::fs;
|
|||||||
use voice_input::{StartListeningError, VoiceSessionResult};
|
use voice_input::{StartListeningError, VoiceSessionResult};
|
||||||
|
|
||||||
use galaxy_core::{
|
use galaxy_core::{
|
||||||
context_flag::ContextFlag,
|
|
||||||
report_if_error,
|
report_if_error,
|
||||||
ui::{
|
ui::{
|
||||||
color::{blend::Blend, contrast::MinimumAllowedContrast, ContrastingColor},
|
color::{blend::Blend, contrast::MinimumAllowedContrast, ContrastingColor},
|
||||||
theme::{color::internal_colors, AnsiColorIdentifier, Fill},
|
theme::{color::internal_colors, Fill},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
#[cfg(feature = "voice_input")]
|
#[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_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 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.;
|
const CLOUD_MODE_V2_FOOTER_GAP: f32 = 4.;
|
||||||
|
|
||||||
/// Voice input state for the CLI agent footer. Unlike the editor-based voice
|
/// Voice input state for the CLI agent footer. Unlike the editor-based voice
|
||||||
@@ -189,8 +184,6 @@ pub struct AgentInputFooter {
|
|||||||
mic_button: ViewHandle<ActionButton>,
|
mic_button: ViewHandle<ActionButton>,
|
||||||
nld_button: ViewHandle<ActionButton>,
|
nld_button: ViewHandle<ActionButton>,
|
||||||
file_button: ViewHandle<ActionButton>,
|
file_button: ViewHandle<ActionButton>,
|
||||||
start_remote_control_button: ViewHandle<ActionButton>,
|
|
||||||
stop_remote_control_button: ViewHandle<ActionButton>,
|
|
||||||
context_window_button: ViewHandle<ActionButton>,
|
context_window_button: ViewHandle<ActionButton>,
|
||||||
model_selector: ViewHandle<ProfileModelSelector>,
|
model_selector: ViewHandle<ProfileModelSelector>,
|
||||||
ftu_callout_close_button: ViewHandle<ActionButton>,
|
ftu_callout_close_button: ViewHandle<ActionButton>,
|
||||||
@@ -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| {
|
let context_window_button = ctx.add_typed_action_view(|_ctx| {
|
||||||
ActionButton::new("", AgentInputButtonTheme)
|
ActionButton::new("", AgentInputButtonTheme)
|
||||||
.with_icon(Icon::ConversationContext0)
|
.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();
|
let prompt_for_session_settings = prompt.clone();
|
||||||
ctx.subscribe_to_model(
|
ctx.subscribe_to_model(
|
||||||
&SessionSettings::handle(ctx),
|
&SessionSettings::handle(ctx),
|
||||||
@@ -727,8 +690,6 @@ impl AgentInputFooter {
|
|||||||
file_explorer_button,
|
file_explorer_button,
|
||||||
rich_input_button,
|
rich_input_button,
|
||||||
settings_button,
|
settings_button,
|
||||||
start_remote_control_button,
|
|
||||||
stop_remote_control_button,
|
|
||||||
install_plugin_button,
|
install_plugin_button,
|
||||||
plugin_instructions_button,
|
plugin_instructions_button,
|
||||||
update_plugin_button,
|
update_plugin_button,
|
||||||
@@ -762,7 +723,6 @@ impl AgentInputFooter {
|
|||||||
v2_model_selector,
|
v2_model_selector,
|
||||||
};
|
};
|
||||||
me.sync_fast_forward_button(ctx);
|
me.sync_fast_forward_button(ctx);
|
||||||
me.sync_remote_control_button(ctx);
|
|
||||||
me.update_context_window_button(ctx);
|
me.update_context_window_button(ctx);
|
||||||
me.update_display_chips(&prompt, ctx);
|
me.update_display_chips(&prompt, ctx);
|
||||||
me.update_ftu_callout_render_state(ctx);
|
me.update_ftu_callout_render_state(ctx);
|
||||||
@@ -1294,21 +1254,6 @@ impl AgentInputFooter {
|
|||||||
#[cfg(not(feature = "voice_input"))]
|
#[cfg(not(feature = "voice_input"))]
|
||||||
None
|
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()),
|
AgentToolbarItemKind::Settings => Some(ChildView::new(&self.settings_button).finish()),
|
||||||
// Handled by the available_in() guard above; included for exhaustiveness.
|
// Handled by the available_in() guard above; included for exhaustiveness.
|
||||||
AgentToolbarItemKind::ModelSelector
|
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<Self>) {
|
|
||||||
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<Self>) {
|
fn update_context_window_button(&mut self, ctx: &mut ViewContext<Self>) {
|
||||||
if let Some(conversation) =
|
if let Some(conversation) =
|
||||||
BlocklistAIHistoryModel::as_ref(ctx).active_conversation(self.terminal_view_id)
|
BlocklistAIHistoryModel::as_ref(ctx).active_conversation(self.terminal_view_id)
|
||||||
@@ -1874,20 +1801,6 @@ impl AgentInputFooter {
|
|||||||
.is_some();
|
.is_some();
|
||||||
has_conversation.then(|| ChildView::new(&self.context_window_button).finish())
|
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
|
AgentToolbarItemKind::FastForwardToggle => FeatureFlag::FastForwardAutoexecuteButton
|
||||||
.is_enabled()
|
.is_enabled()
|
||||||
.then(|| ChildView::new(&self.fast_forward_button).finish()),
|
.then(|| ChildView::new(&self.fast_forward_button).finish()),
|
||||||
@@ -2144,8 +2057,6 @@ pub enum AgentInputFooterAction {
|
|||||||
OpenPluginInstallInstructionsPane,
|
OpenPluginInstallInstructionsPane,
|
||||||
OpenPluginUpdateInstructionsPane,
|
OpenPluginUpdateInstructionsPane,
|
||||||
DismissPluginChip,
|
DismissPluginChip,
|
||||||
StartRemoteControl,
|
|
||||||
StopRemoteControl,
|
|
||||||
OpenCodingAgentSettings,
|
OpenCodingAgentSettings,
|
||||||
ShowContextMenu {
|
ShowContextMenu {
|
||||||
position: Vector2F,
|
position: Vector2F,
|
||||||
@@ -2330,12 +2241,6 @@ impl TypedActionView for AgentInputFooter {
|
|||||||
}
|
}
|
||||||
ctx.notify();
|
ctx.notify();
|
||||||
}
|
}
|
||||||
AgentInputFooterAction::StartRemoteControl => {
|
|
||||||
ctx.emit(AgentInputFooterEvent::StartRemoteControl);
|
|
||||||
}
|
|
||||||
AgentInputFooterAction::StopRemoteControl => {
|
|
||||||
ctx.emit(AgentInputFooterEvent::StopRemoteControl);
|
|
||||||
}
|
|
||||||
AgentInputFooterAction::OpenCodingAgentSettings => {
|
AgentInputFooterAction::OpenCodingAgentSettings => {
|
||||||
#[cfg(not(target_family = "wasm"))]
|
#[cfg(not(target_family = "wasm"))]
|
||||||
ctx.dispatch_typed_action_deferred(WorkspaceAction::ScrollToSettingsWidget {
|
ctx.dispatch_typed_action_deferred(WorkspaceAction::ScrollToSettingsWidget {
|
||||||
@@ -2361,8 +2266,6 @@ pub enum AgentInputFooterEvent {
|
|||||||
InsertIntoCLIRichInput(String),
|
InsertIntoCLIRichInput(String),
|
||||||
ToggleCodeReviewPane(CLIAgent),
|
ToggleCodeReviewPane(CLIAgent),
|
||||||
ToggleFileExplorer(CLIAgent),
|
ToggleFileExplorer(CLIAgent),
|
||||||
StartRemoteControl,
|
|
||||||
StopRemoteControl,
|
|
||||||
OpenRichInput,
|
OpenRichInput,
|
||||||
HideRichInput,
|
HideRichInput,
|
||||||
ToggledChipMenu {
|
ToggledChipMenu {
|
||||||
|
|||||||
@@ -61,7 +61,6 @@ pub enum AgentToolbarItemKind {
|
|||||||
// Renamed from ImageAttach; alias preserves existing user toolbar configs.
|
// Renamed from ImageAttach; alias preserves existing user toolbar configs.
|
||||||
#[serde(alias = "ImageAttach")]
|
#[serde(alias = "ImageAttach")]
|
||||||
FileAttach,
|
FileAttach,
|
||||||
ShareSession,
|
|
||||||
|
|
||||||
// CLI agent only – opens settings to the Coding Agents section.
|
// CLI agent only – opens settings to the Coding Agents section.
|
||||||
Settings,
|
Settings,
|
||||||
@@ -73,7 +72,7 @@ pub enum AgentToolbarItemKind {
|
|||||||
impl AgentToolbarItemKind {
|
impl AgentToolbarItemKind {
|
||||||
pub fn available_in(&self) -> ToolbarAvailability {
|
pub fn available_in(&self) -> ToolbarAvailability {
|
||||||
match self {
|
match self {
|
||||||
Self::ContextChip(_) | Self::VoiceInput | Self::FileAttach | Self::ShareSession => {
|
Self::ContextChip(_) | Self::VoiceInput | Self::FileAttach => {
|
||||||
ToolbarAvailability::Both
|
ToolbarAvailability::Both
|
||||||
}
|
}
|
||||||
Self::ModelSelector
|
Self::ModelSelector
|
||||||
@@ -95,7 +94,7 @@ impl AgentToolbarItemKind {
|
|||||||
is_cloud_mode: bool,
|
is_cloud_mode: bool,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
match self {
|
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::FileAttach => !status.is_viewer() || is_cloud_mode,
|
||||||
Self::FastForwardToggle => !status.is_viewer() || status.is_executor(),
|
Self::FastForwardToggle => !status.is_viewer() || status.is_executor(),
|
||||||
Self::ContextChip(_)
|
Self::ContextChip(_)
|
||||||
@@ -117,7 +116,6 @@ impl AgentToolbarItemKind {
|
|||||||
Self::ContextWindowUsage => "Context Usage",
|
Self::ContextWindowUsage => "Context Usage",
|
||||||
Self::FileExplorer => "File Explorer",
|
Self::FileExplorer => "File Explorer",
|
||||||
Self::RichInput => "Rich Input",
|
Self::RichInput => "Rich Input",
|
||||||
Self::ShareSession => "/remote-control",
|
|
||||||
Self::Settings => "Settings",
|
Self::Settings => "Settings",
|
||||||
Self::FastForwardToggle => "Fast Forward",
|
Self::FastForwardToggle => "Fast Forward",
|
||||||
}
|
}
|
||||||
@@ -133,7 +131,6 @@ impl AgentToolbarItemKind {
|
|||||||
Self::ContextWindowUsage => Some(Icon::ConversationContext0),
|
Self::ContextWindowUsage => Some(Icon::ConversationContext0),
|
||||||
Self::FileExplorer => Some(Icon::FileCopy),
|
Self::FileExplorer => Some(Icon::FileCopy),
|
||||||
Self::RichInput => Some(Icon::TextInput),
|
Self::RichInput => Some(Icon::TextInput),
|
||||||
Self::ShareSession => Some(Icon::Phone01),
|
|
||||||
Self::Settings => Some(Icon::Settings),
|
Self::Settings => Some(Icon::Settings),
|
||||||
Self::FastForwardToggle => Some(Icon::FastForward),
|
Self::FastForwardToggle => Some(Icon::FastForward),
|
||||||
}
|
}
|
||||||
@@ -172,11 +169,6 @@ impl AgentToolbarItemKind {
|
|||||||
Self::ContextWindowUsage,
|
Self::ContextWindowUsage,
|
||||||
Self::ModelSelector,
|
Self::ModelSelector,
|
||||||
];
|
];
|
||||||
if FeatureFlag::CreatingSharedSessions.is_enabled()
|
|
||||||
&& FeatureFlag::HOARemoteControl.is_enabled()
|
|
||||||
{
|
|
||||||
items.push(Self::ShareSession);
|
|
||||||
}
|
|
||||||
items.push(Self::VoiceInput);
|
items.push(Self::VoiceInput);
|
||||||
items.push(Self::FileAttach);
|
items.push(Self::FileAttach);
|
||||||
items
|
items
|
||||||
@@ -198,11 +190,6 @@ impl AgentToolbarItemKind {
|
|||||||
if FeatureFlag::FastForwardAutoexecuteButton.is_enabled() {
|
if FeatureFlag::FastForwardAutoexecuteButton.is_enabled() {
|
||||||
items.push(Self::FastForwardToggle);
|
items.push(Self::FastForwardToggle);
|
||||||
}
|
}
|
||||||
if FeatureFlag::CreatingSharedSessions.is_enabled()
|
|
||||||
&& FeatureFlag::HOARemoteControl.is_enabled()
|
|
||||||
{
|
|
||||||
items.push(Self::ShareSession);
|
|
||||||
}
|
|
||||||
items
|
items
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,11 +200,6 @@ impl AgentToolbarItemKind {
|
|||||||
Self::VoiceInput,
|
Self::VoiceInput,
|
||||||
Self::ContextChip(ContextChipKind::GitDiffStats),
|
Self::ContextChip(ContextChipKind::GitDiffStats),
|
||||||
];
|
];
|
||||||
if FeatureFlag::CreatingSharedSessions.is_enabled()
|
|
||||||
&& FeatureFlag::HOARemoteControl.is_enabled()
|
|
||||||
{
|
|
||||||
items.push(Self::ShareSession);
|
|
||||||
}
|
|
||||||
items.push(Self::FileExplorer);
|
items.push(Self::FileExplorer);
|
||||||
if FeatureFlag::CLIAgentRichInput.is_enabled() {
|
if FeatureFlag::CLIAgentRichInput.is_enabled() {
|
||||||
items.push(Self::RichInput);
|
items.push(Self::RichInput);
|
||||||
@@ -247,11 +229,6 @@ impl AgentToolbarItemKind {
|
|||||||
Self::VoiceInput,
|
Self::VoiceInput,
|
||||||
Self::Settings,
|
Self::Settings,
|
||||||
]);
|
]);
|
||||||
if FeatureFlag::CreatingSharedSessions.is_enabled()
|
|
||||||
&& FeatureFlag::HOARemoteControl.is_enabled()
|
|
||||||
{
|
|
||||||
items.push(Self::ShareSession);
|
|
||||||
}
|
|
||||||
items
|
items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 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 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 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 SHOW_SSH_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Show Enhanced SSH Blocks";
|
||||||
const HIDE_SSH_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Hide Warpified SSH Blocks";
|
const HIDE_SSH_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Hide Enhanced SSH Blocks";
|
||||||
const EXPORT_DEFAULT_SETTINGS_CSV_MENU_ITEM_NAME: &str =
|
const EXPORT_DEFAULT_SETTINGS_CSV_MENU_ITEM_NAME: &str =
|
||||||
"Export Default Settings as CSV to home dir";
|
"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::Standard(StandardAction::ShowAllApps));
|
||||||
menu_items.push(MenuItem::Separator);
|
menu_items.push(MenuItem::Separator);
|
||||||
menu_items.push(MenuItem::Custom(CustomMenuItem::new(
|
menu_items.push(MenuItem::Custom(CustomMenuItem::new(
|
||||||
"Set Warp as Default Terminal",
|
"Set Galaxy as Default Terminal",
|
||||||
move |ctx| {
|
move |ctx| {
|
||||||
DefaultTerminal::handle(ctx).update(ctx, |default_terminal, ctx| {
|
DefaultTerminal::handle(ctx).update(ctx, |default_terminal, ctx| {
|
||||||
default_terminal.make_warp_default(ctx)
|
default_terminal.make_warp_default(ctx)
|
||||||
@@ -299,7 +299,7 @@ fn make_new_edit_menu(ctx: &AppContext) -> Menu {
|
|||||||
];
|
];
|
||||||
let group_5 = vec![
|
let group_5 = vec![
|
||||||
MenuItem::Custom(CustomMenuItem::new(
|
MenuItem::Custom(CustomMenuItem::new(
|
||||||
"Use Warp's Prompt",
|
"Use Galaxy's Prompt",
|
||||||
move |ctx| ctx.dispatch_global_action("app:toggle_user_ps1", &()),
|
move |ctx| ctx.dispatch_global_action("app:toggle_user_ps1", &()),
|
||||||
move |_props, ctx| MenuItemPropertyChanges {
|
move |_props, ctx| MenuItemPropertyChanges {
|
||||||
checked: Some(
|
checked: Some(
|
||||||
@@ -924,9 +924,9 @@ fn make_new_help_menu() -> Menu {
|
|||||||
"Help",
|
"Help",
|
||||||
vec![
|
vec![
|
||||||
feedback_menu_item(),
|
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("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()),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -732,11 +732,11 @@ fn dmg_name(channel: Channel) -> String {
|
|||||||
|
|
||||||
fn app_name_prefix(channel: Channel) -> &'static str {
|
fn app_name_prefix(channel: Channel) -> &'static str {
|
||||||
match channel {
|
match channel {
|
||||||
Channel::Stable => "GalaxyAI",
|
Channel::Stable => "Galaxy",
|
||||||
Channel::Preview => "GalaxyAIPreview",
|
Channel::Preview => "GalaxyPreview",
|
||||||
Channel::Local => "galaxy-ai",
|
Channel::Local => "galaxy-ai",
|
||||||
Channel::Integration => "integration",
|
Channel::Integration => "integration",
|
||||||
Channel::Dev => "GalaxyAIDev",
|
Channel::Dev => "GalaxyDev",
|
||||||
Channel::Oss => "galaxy-ai-oss",
|
Channel::Oss => "galaxy-ai-oss",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -254,11 +254,11 @@ fn installer_file_name() -> Result<String> {
|
|||||||
|
|
||||||
fn app_name_prefix(channel: Channel) -> &'static str {
|
fn app_name_prefix(channel: Channel) -> &'static str {
|
||||||
match channel {
|
match channel {
|
||||||
Channel::Stable => "GalaxyAI",
|
Channel::Stable => "Galaxy",
|
||||||
Channel::Preview => "GalaxyAIPreview",
|
Channel::Preview => "GalaxyPreview",
|
||||||
Channel::Local => "galaxy-ai",
|
Channel::Local => "galaxy-ai",
|
||||||
Channel::Integration => "integration",
|
Channel::Integration => "integration",
|
||||||
Channel::Dev => "GalaxyAIDev",
|
Channel::Dev => "GalaxyDev",
|
||||||
Channel::Oss => "galaxy-ai-oss",
|
Channel::Oss => "galaxy-ai-oss",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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}"))
|
|
||||||
}
|
|
||||||
+15
-7
@@ -2,19 +2,27 @@
|
|||||||
// builds. See https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute.
|
// builds. See https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute.
|
||||||
#![cfg_attr(feature = "release_bundle", windows_subsystem = "windows")]
|
#![cfg_attr(feature = "release_bundle", windows_subsystem = "windows")]
|
||||||
|
|
||||||
#[path = "channel_config.rs"]
|
|
||||||
mod channel_config;
|
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use galaxy_core::{
|
use galaxy_core::{
|
||||||
channel::{Channel, ChannelState},
|
channel::{Channel, ChannelConfig, ChannelState, OzConfig, WarpServerConfig},
|
||||||
features,
|
features, AppId,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Simple wrapper around galaxy::run() for dev channel builds.
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
ChannelState::set(
|
ChannelState::set(
|
||||||
ChannelState::new(Channel::Dev, channel_config::load_config!("dev"))
|
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::DEBUG_FLAGS)
|
||||||
.with_additional_features(features::DOGFOOD_FLAGS)
|
.with_additional_features(features::DOGFOOD_FLAGS)
|
||||||
.with_additional_features(features::PREVIEW_FLAGS),
|
.with_additional_features(features::PREVIEW_FLAGS),
|
||||||
|
|||||||
+17
-10
@@ -1,16 +1,23 @@
|
|||||||
#[path = "channel_config.rs"]
|
|
||||||
mod channel_config;
|
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use galaxy_core::{
|
use galaxy_core::{
|
||||||
channel::{Channel, ChannelState},
|
channel::{Channel, ChannelConfig, ChannelState, OzConfig, WarpServerConfig},
|
||||||
features,
|
features, AppId,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
let config = channel_config::load_config!("local");
|
let mut state = ChannelState::new(
|
||||||
|
Channel::Local,
|
||||||
let mut state = ChannelState::new(Channel::Local, config)
|
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::DEBUG_FLAGS)
|
||||||
.with_additional_features(features::DOGFOOD_FLAGS)
|
.with_additional_features(features::DOGFOOD_FLAGS)
|
||||||
.with_additional_features(features::PREVIEW_FLAGS);
|
.with_additional_features(features::PREVIEW_FLAGS);
|
||||||
@@ -37,9 +44,9 @@ embed_plist::embed_info_plist_bytes!(r#"
|
|||||||
<key>CFBundleDisplayName</key>
|
<key>CFBundleDisplayName</key>
|
||||||
<string>Galaxy</string>
|
<string>Galaxy</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>galaxy-ai</string>
|
<string>galaxy-local</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>com.samsung.GalaxyAI-Local</string>
|
<string>com.samsung.Galaxy-Local</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
|
|||||||
+4
-4
@@ -12,8 +12,8 @@ fn main() -> Result<()> {
|
|||||||
let mut state = ChannelState::new(
|
let mut state = ChannelState::new(
|
||||||
Channel::Oss,
|
Channel::Oss,
|
||||||
ChannelConfig {
|
ChannelConfig {
|
||||||
app_id: AppId::new("com", "samsung", "GalaxyAI"),
|
app_id: AppId::new("com", "samsung", "Galaxy"),
|
||||||
logfile_name: "galaxy-ai.log".into(),
|
logfile_name: "galaxy.log".into(),
|
||||||
server_config: WarpServerConfig::production(),
|
server_config: WarpServerConfig::production(),
|
||||||
oz_config: OzConfig::production(),
|
oz_config: OzConfig::production(),
|
||||||
telemetry_config: None,
|
telemetry_config: None,
|
||||||
@@ -41,9 +41,9 @@ embed_plist::embed_info_plist_bytes!(r#"
|
|||||||
<key>CFBundleDisplayName</key>
|
<key>CFBundleDisplayName</key>
|
||||||
<string>Galaxy</string>
|
<string>Galaxy</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>galaxy-ai-oss</string>
|
<string>galaxy-oss</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>com.samsung.GalaxyAI</string>
|
<string>com.samsung.Galaxy</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
|
|||||||
+16
-9
@@ -2,21 +2,28 @@
|
|||||||
// builds. See https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute.
|
// builds. See https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute.
|
||||||
#![cfg_attr(feature = "release_bundle", windows_subsystem = "windows")]
|
#![cfg_attr(feature = "release_bundle", windows_subsystem = "windows")]
|
||||||
|
|
||||||
#[path = "channel_config.rs"]
|
|
||||||
mod channel_config;
|
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use galaxy_core::{
|
use galaxy_core::{
|
||||||
channel::{Channel, ChannelState},
|
channel::{Channel, ChannelConfig, ChannelState, OzConfig, WarpServerConfig},
|
||||||
features,
|
features, AppId,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Simple wrapper around galaxy::run() for feature preview channel builds.
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
ChannelState::set(
|
ChannelState::set(
|
||||||
ChannelState::new(Channel::Preview, channel_config::load_config!("preview"))
|
ChannelState::new(
|
||||||
.with_additional_features(features::PREVIEW_FLAGS)
|
Channel::Preview,
|
||||||
.with_additional_features(&[features::FeatureFlag::ForceLogin]),
|
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()
|
galaxy::run()
|
||||||
|
|||||||
+14
-6
@@ -2,17 +2,25 @@
|
|||||||
// builds. See https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute.
|
// builds. See https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute.
|
||||||
#![cfg_attr(feature = "release_bundle", windows_subsystem = "windows")]
|
#![cfg_attr(feature = "release_bundle", windows_subsystem = "windows")]
|
||||||
|
|
||||||
#[path = "channel_config.rs"]
|
|
||||||
mod channel_config;
|
|
||||||
|
|
||||||
use anyhow::Result;
|
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<()> {
|
fn main() -> Result<()> {
|
||||||
ChannelState::set(ChannelState::new(
|
ChannelState::set(ChannelState::new(
|
||||||
Channel::Stable,
|
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()
|
galaxy::run()
|
||||||
|
|||||||
+1
-12
@@ -654,18 +654,7 @@ impl DriveIndex {
|
|||||||
.map(|space| DriveIndexSection::Space(*space))
|
.map(|space| DriveIndexSection::Space(*space))
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
if !user_workspaces.as_ref(ctx).has_teams() {
|
// Team creation/joining removed — Galaxy operates without Warp's team API.
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Item UI state is attached by index, not by id, so this is re-initialized whenever there's any type of change
|
// 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
|
let item_mouse_states = num_cloud_objects_per_space
|
||||||
|
|||||||
@@ -378,15 +378,6 @@ pub const USAGE: StaticCommand = StaticCommand {
|
|||||||
argument: None,
|
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 {
|
pub const COST: StaticCommand = StaticCommand {
|
||||||
name: "/cost",
|
name: "/cost",
|
||||||
description: "Toggle credit usage details",
|
description: "Toggle credit usage details",
|
||||||
@@ -536,12 +527,6 @@ fn all_commands() -> Vec<StaticCommand> {
|
|||||||
commands.push(CREATE_DOCKER_SANDBOX);
|
commands.push(CREATE_DOCKER_SANDBOX);
|
||||||
}
|
}
|
||||||
|
|
||||||
if FeatureFlag::CreatingSharedSessions.is_enabled()
|
|
||||||
&& FeatureFlag::HOARemoteControl.is_enabled()
|
|
||||||
{
|
|
||||||
commands.push(REMOTE_CONTROL);
|
|
||||||
}
|
|
||||||
|
|
||||||
if FeatureFlag::Changelog.is_enabled() {
|
if FeatureFlag::Changelog.is_enabled() {
|
||||||
commands.push(CHANGELOG);
|
commands.push(CHANGELOG);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ use super::{
|
|||||||
SettingsSection,
|
SettingsSection,
|
||||||
};
|
};
|
||||||
use crate::{
|
use crate::{
|
||||||
appearance::Appearance, channel::ChannelState, themes::theme::ColorScheme,
|
appearance::Appearance, channel::ChannelState,
|
||||||
workspace::WorkspaceAction,
|
workspace::WorkspaceAction,
|
||||||
};
|
};
|
||||||
use galaxyui::{
|
use galaxyui::{
|
||||||
@@ -66,11 +66,7 @@ impl SettingsWidget for AboutPageWidget {
|
|||||||
let theme = appearance.theme();
|
let theme = appearance.theme();
|
||||||
let ui_builder = appearance.ui_builder();
|
let ui_builder = appearance.ui_builder();
|
||||||
|
|
||||||
let image_path = if theme.inferred_color_scheme() == ColorScheme::LightOnDark {
|
let image_path = "bundled/svg/galaxy-logo.svg";
|
||||||
"bundled/svg/bedrock.svg"
|
|
||||||
} else {
|
|
||||||
"bundled/svg/bedrock.svg"
|
|
||||||
};
|
|
||||||
|
|
||||||
let version = ChannelState::app_version()
|
let version = ChannelState::app_version()
|
||||||
.unwrap_or(concat!("v", env!("CARGO_PKG_VERSION")));
|
.unwrap_or(concat!("v", env!("CARGO_PKG_VERSION")));
|
||||||
|
|||||||
@@ -239,7 +239,7 @@ impl Display for SettingsSection {
|
|||||||
SettingsSection::Knowledge => write!(f, "Knowledge"),
|
SettingsSection::Knowledge => write!(f, "Knowledge"),
|
||||||
SettingsSection::ThirdPartyCLIAgents => write!(f, "Third party CLI agents"),
|
SettingsSection::ThirdPartyCLIAgents => write!(f, "Third party CLI agents"),
|
||||||
SettingsSection::Bedrock => write!(f, "AWS Bedrock"),
|
SettingsSection::Bedrock => write!(f, "AWS Bedrock"),
|
||||||
SettingsSection::Warpify => write!(f, "Galaxify"),
|
SettingsSection::Warpify => write!(f, "Galaxyize"),
|
||||||
SettingsSection::CodeIndexing => write!(f, "Indexing and projects"),
|
SettingsSection::CodeIndexing => write!(f, "Indexing and projects"),
|
||||||
SettingsSection::EditorAndCodeReview => write!(f, "Editor and Code Review"),
|
SettingsSection::EditorAndCodeReview => write!(f, "Editor and Code Review"),
|
||||||
_ => write!(f, "{self:?}"),
|
_ => write!(f, "{self:?}"),
|
||||||
@@ -318,7 +318,7 @@ impl FromStr for SettingsSection {
|
|||||||
"Features" => Ok(Self::Features),
|
"Features" => Ok(Self::Features),
|
||||||
"Keyboard shortcuts" => Ok(Self::Keybindings),
|
"Keyboard shortcuts" => Ok(Self::Keybindings),
|
||||||
"Privacy" => Ok(Self::Privacy),
|
"Privacy" => Ok(Self::Privacy),
|
||||||
"Warpify" | "Galaxify" => Ok(Self::Warpify),
|
"Warpify" | "Galaxyize" => Ok(Self::Warpify),
|
||||||
"WarpDrive" | "Warp Drive" | "Galaxy Drive" => Ok(Self::WarpDrive),
|
"WarpDrive" | "Warp Drive" | "Galaxy Drive" => Ok(Self::WarpDrive),
|
||||||
// This page was called "Oz" at one point, keep for backward compatibility.
|
// This page was called "Oz" at one point, keep for backward compatibility.
|
||||||
"Oz" | "Warp Agent" | "Galaxy Agent" => Ok(Self::WarpAgent),
|
"Oz" | "Warp Agent" | "Galaxy Agent" => Ok(Self::WarpAgent),
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ impl WarpifyPageView {
|
|||||||
{
|
{
|
||||||
categories.push(
|
categories.push(
|
||||||
Category::new("SSH", vec![Box::new(SSHWidget::default())])
|
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)
|
PageType::new_categorized(categories, None)
|
||||||
@@ -532,7 +532,7 @@ impl TitleWidget {
|
|||||||
fn render_top_of_page(&self, appearance: &Appearance, _app: &AppContext) -> Box<dyn Element> {
|
fn render_top_of_page(&self, appearance: &Appearance, _app: &AppContext) -> Box<dyn Element> {
|
||||||
let warpify_description = vec![
|
let warpify_description = vec![
|
||||||
FormattedTextFragment::plain_text(
|
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. ",
|
input modes, etc) certain shells. ",
|
||||||
),
|
),
|
||||||
FormattedTextFragment::hyperlink(
|
FormattedTextFragment::hyperlink(
|
||||||
@@ -556,7 +556,7 @@ impl TitleWidget {
|
|||||||
.finish();
|
.finish();
|
||||||
|
|
||||||
Flex::column()
|
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)
|
.with_child(warpify_description)
|
||||||
.finish()
|
.finish()
|
||||||
}
|
}
|
||||||
@@ -682,7 +682,7 @@ impl SettingsWidget for SSHWidget {
|
|||||||
&WarpifySettings::as_ref(app).enable_ssh_warpification,
|
&WarpifySettings::as_ref(app).enable_ssh_warpification,
|
||||||
move || {
|
move || {
|
||||||
render_body_item::<WarpifyPageAction>(
|
render_body_item::<WarpifyPageAction>(
|
||||||
"Galaxify SSH Sessions".into(),
|
"Galaxyize SSH Sessions".into(),
|
||||||
None,
|
None,
|
||||||
LocalOnlyIconState::for_setting(
|
LocalOnlyIconState::for_setting(
|
||||||
EnableSshWarpification::storage_key(),
|
EnableSshWarpification::storage_key(),
|
||||||
|
|||||||
@@ -2201,10 +2201,6 @@ impl Input {
|
|||||||
AgentInputFooterEvent::OpenRichInput | AgentInputFooterEvent::HideRichInput => {
|
AgentInputFooterEvent::OpenRichInput | AgentInputFooterEvent::HideRichInput => {
|
||||||
ctx.emit(Event::Escape);
|
ctx.emit(Event::Escape);
|
||||||
}
|
}
|
||||||
AgentInputFooterEvent::StartRemoteControl
|
|
||||||
| AgentInputFooterEvent::StopRemoteControl => {
|
|
||||||
// Handled by UseAgentToolbar's subscription, not here.
|
|
||||||
}
|
|
||||||
// WriteToPty, InsertIntoCLIRichInput, ToggleCodeReviewPane, and ToggleFileExplorer
|
// WriteToPty, InsertIntoCLIRichInput, ToggleCodeReviewPane, and ToggleFileExplorer
|
||||||
// are handled by UseAgentToolbar's subscription, not here.
|
// are handled by UseAgentToolbar's subscription, not here.
|
||||||
AgentInputFooterEvent::WriteToPty(_)
|
AgentInputFooterEvent::WriteToPty(_)
|
||||||
|
|||||||
@@ -674,23 +674,6 @@ impl Input {
|
|||||||
_usage if command.name == commands::USAGE.name => {
|
_usage if command.name == commands::USAGE.name => {
|
||||||
ctx.dispatch_typed_action(&TerminalAction::OpenBillingAndUsagePane);
|
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 => {
|
_cost if command.name == commands::COST.name => {
|
||||||
let history = BlocklistAIHistoryModel::handle(ctx);
|
let history = BlocklistAIHistoryModel::handle(ctx);
|
||||||
let conversation = history
|
let conversation = history
|
||||||
|
|||||||
@@ -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.";
|
"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 =
|
const TMUX_FAILED_ERROR: &str =
|
||||||
"tmux failed to execute on the remote machine. Please re-install tmux and try again.";
|
"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 =
|
const UNSUPPORTED_SHELL_ERROR: &str =
|
||||||
"Unsupported shell. Please set bash, zsh, or fish as your default shell and try again.";
|
"Unsupported shell. Please set bash, zsh, or fish as your default shell and try again.";
|
||||||
const TMUX_INSTALL_FAILED_ERROR: &str =
|
const TMUX_INSTALL_FAILED_ERROR: &str =
|
||||||
@@ -258,7 +258,7 @@ impl View for SshErrorBlock {
|
|||||||
ButtonVariant::Accent,
|
ButtonVariant::Accent,
|
||||||
self.warpify_without_tmux_button_mouse_state.clone(),
|
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 {
|
.with_style(UiComponentStyles {
|
||||||
font_size: Some(appearance.monospace_font_size()),
|
font_size: Some(appearance.monospace_font_size()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ impl Entity for SshWarpifyBlock {
|
|||||||
impl SshWarpifyBlock {
|
impl SshWarpifyBlock {
|
||||||
fn render_title_ui(&self, theme: &WarpTheme, appearance: &Appearance) -> Box<dyn Element> {
|
fn render_title_ui(&self, theme: &WarpTheme, appearance: &Appearance) -> Box<dyn Element> {
|
||||||
let icon = Icon::new(UiIcon::Warp.into(), theme.active_ui_detail());
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -97,8 +97,8 @@ impl WarpifyBannerState {
|
|||||||
|
|
||||||
pub fn title(&self) -> &str {
|
pub fn title(&self) -> &str {
|
||||||
match &self.mode {
|
match &self.mode {
|
||||||
WarpificationMode::Ssh { .. } => "Galaxify SSH session",
|
WarpificationMode::Ssh { .. } => "Galaxyize SSH session",
|
||||||
WarpificationMode::Subshell { .. } => "Galaxify subshell",
|
WarpificationMode::Subshell { .. } => "Galaxyize subshell",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -341,7 +341,7 @@ pub fn init(app: &mut AppContext) {
|
|||||||
),
|
),
|
||||||
EditableBinding::new(
|
EditableBinding::new(
|
||||||
"terminal:warpify_subshell",
|
"terminal:warpify_subshell",
|
||||||
"Galaxify subshell",
|
"Galaxyize subshell",
|
||||||
TerminalAction::TriggerSubshellBootstrap,
|
TerminalAction::TriggerSubshellBootstrap,
|
||||||
)
|
)
|
||||||
.with_key_binding("ctrl-i")
|
.with_key_binding("ctrl-i")
|
||||||
@@ -350,7 +350,7 @@ pub fn init(app: &mut AppContext) {
|
|||||||
),
|
),
|
||||||
EditableBinding::new(
|
EditableBinding::new(
|
||||||
"terminal:warpify_ssh_session",
|
"terminal:warpify_ssh_session",
|
||||||
"Galaxify ssh session",
|
"Galaxyize ssh session",
|
||||||
TerminalAction::WarpifySSHSession,
|
TerminalAction::WarpifySSHSession,
|
||||||
)
|
)
|
||||||
.with_key_binding("ctrl-i")
|
.with_key_binding("ctrl-i")
|
||||||
|
|||||||
@@ -9,9 +9,7 @@ use crate::ai::blocklist::agent_view::agent_input_footer::{
|
|||||||
AgentInputFooter, AgentInputFooterEvent,
|
AgentInputFooter, AgentInputFooterEvent,
|
||||||
};
|
};
|
||||||
use crate::terminal::cli_agent_sessions::{CLIAgentInputEntrypoint, CLIAgentSessionsModel};
|
use crate::terminal::cli_agent_sessions::{CLIAgentInputEntrypoint, CLIAgentSessionsModel};
|
||||||
use crate::terminal::shared_session::{SharedSessionActionSource, SharedSessionScrollbackType};
|
|
||||||
use base64::Engine;
|
use base64::Engine;
|
||||||
use session_sharing_protocol::sharer::SessionSourceType;
|
|
||||||
use galaxyui::clipboard::{ClipboardContent, ImageData};
|
use galaxyui::clipboard::{ClipboardContent, ImageData};
|
||||||
mod warpify_footer;
|
mod warpify_footer;
|
||||||
|
|
||||||
@@ -231,21 +229,6 @@ impl TerminalView {
|
|||||||
UseAgentToolbarEvent::ToggleFileExplorer(cli_agent) => {
|
UseAgentToolbarEvent::ToggleFileExplorer(cli_agent) => {
|
||||||
self.toggle_file_tree(Some((*cli_agent).into()), ctx);
|
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 => {
|
UseAgentToolbarEvent::OpenRichInput => {
|
||||||
if self.has_active_cli_agent_input_session(ctx) {
|
if self.has_active_cli_agent_input_session(ctx) {
|
||||||
self.close_cli_agent_rich_input_and_disable_auto_toggle(ctx);
|
self.close_cli_agent_rich_input_and_disable_auto_toggle(ctx);
|
||||||
@@ -1074,17 +1057,6 @@ impl UseAgentToolbar {
|
|||||||
AgentInputFooterEvent::ToggleFileExplorer(agent) => {
|
AgentInputFooterEvent::ToggleFileExplorer(agent) => {
|
||||||
ctx.emit(UseAgentToolbarEvent::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 => {
|
AgentInputFooterEvent::OpenRichInput => {
|
||||||
ctx.emit(UseAgentToolbarEvent::OpenRichInput);
|
ctx.emit(UseAgentToolbarEvent::OpenRichInput);
|
||||||
}
|
}
|
||||||
@@ -1182,12 +1154,6 @@ pub enum UseAgentToolbarEvent {
|
|||||||
ToggleCodeReviewPane(CLIAgent),
|
ToggleCodeReviewPane(CLIAgent),
|
||||||
/// Toggle the file explorer (from CLI agent view).
|
/// Toggle the file explorer (from CLI agent view).
|
||||||
ToggleFileExplorer(CLIAgent),
|
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.
|
/// Open the rich input editor for composing a prompt.
|
||||||
OpenRichInput,
|
OpenRichInput,
|
||||||
/// Hide the rich input editor (same as Escape).
|
/// Hide the rich input editor (same as Escape).
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ impl WarpifyFooterView {
|
|||||||
let button_size = ButtonSize::XSmall;
|
let button_size = ButtonSize::XSmall;
|
||||||
|
|
||||||
let warpify_button = ctx.add_typed_action_view(|_ctx| {
|
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_icon(Icon::Warp)
|
||||||
.with_size(button_size)
|
.with_size(button_size)
|
||||||
.with_tooltip("Enable Galaxy shell integration in this session")
|
.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<Self>) {
|
pub fn set_mode(&mut self, mode: WarpificationMode, ctx: &mut ViewContext<Self>) {
|
||||||
let (label, binding_name) = match mode {
|
let (label, binding_name) = match mode {
|
||||||
WarpificationMode::Ssh { .. } => {
|
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| {
|
self.warpify_button.update(ctx, |button, ctx| {
|
||||||
button.set_label(label, ctx);
|
button.set_label(label, ctx);
|
||||||
|
|||||||
@@ -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(
|
target.add_child(
|
||||||
Container::new(self.render_settings_button(appearance))
|
Container::new(self.render_settings_button(appearance))
|
||||||
.with_margin_left(TAB_BAR_PADDING_LEFT)
|
.with_margin_left(TAB_BAR_PADDING_LEFT)
|
||||||
.finish(),
|
.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(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if self.auth_state.is_anonymous_or_logged_out()
|
if self.auth_state.is_anonymous_or_logged_out()
|
||||||
&& !FeatureFlag::OpenWarpNewSettingsModes.is_enabled()
|
&& !FeatureFlag::OpenWarpNewSettingsModes.is_enabled()
|
||||||
@@ -17798,7 +17772,7 @@ impl Workspace {
|
|||||||
Align::new(
|
Align::new(
|
||||||
self.render_tab_bar_icon_button(
|
self.render_tab_bar_icon_button(
|
||||||
appearance,
|
appearance,
|
||||||
icons::Icon::Gear,
|
icons::Icon::Stars,
|
||||||
&self.mouse_states.settings_icon,
|
&self.mouse_states.settings_icon,
|
||||||
WorkspaceAction::ShowSettings,
|
WorkspaceAction::ShowSettings,
|
||||||
"Settings".to_string(),
|
"Settings".to_string(),
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 246 KiB |
@@ -28,7 +28,7 @@ use crate::{
|
|||||||
///
|
///
|
||||||
/// This should be used, for example, as the base directory under which
|
/// This should be used, for example, as the base directory under which
|
||||||
/// repository workflows would be stored (in "./.warp-core/workflows").
|
/// 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.
|
/// The legacy config directory name used by Warp before the rename to Warp Core.
|
||||||
/// Used for auto-migration on first launch.
|
/// Used for auto-migration on first launch.
|
||||||
|
|||||||
+5
-5
@@ -152,13 +152,13 @@ mkdir -p "$OUT_DIR"
|
|||||||
if [[ $RELEASE_CHANNEL = "local" ]]; then
|
if [[ $RELEASE_CHANNEL = "local" ]]; then
|
||||||
WARP_BIN="warp"
|
WARP_BIN="warp"
|
||||||
BINARY_NAME="warp-local"
|
BINARY_NAME="warp-local"
|
||||||
APP_NAME="WarpLocal"
|
APP_NAME="GalaxyLocal"
|
||||||
FEATURES="$FEATURES,agent_mode_debug"
|
FEATURES="$FEATURES,agent_mode_debug"
|
||||||
export HANDLE_MARKDOWN=1
|
export HANDLE_MARKDOWN=1
|
||||||
elif [[ $RELEASE_CHANNEL = "dev" ]]; then
|
elif [[ $RELEASE_CHANNEL = "dev" ]]; then
|
||||||
WARP_BIN="dev"
|
WARP_BIN="dev"
|
||||||
BINARY_NAME="warp-dev"
|
BINARY_NAME="warp-dev"
|
||||||
APP_NAME="WarpDev"
|
APP_NAME="GalaxyDev"
|
||||||
FEATURES="$FEATURES,agent_mode_debug"
|
FEATURES="$FEATURES,agent_mode_debug"
|
||||||
# Enable heap profiling using jemalloc through pprof.
|
# Enable heap profiling using jemalloc through pprof.
|
||||||
FEATURES="$FEATURES,jemalloc_pprof"
|
FEATURES="$FEATURES,jemalloc_pprof"
|
||||||
@@ -166,16 +166,16 @@ elif [[ $RELEASE_CHANNEL = "dev" ]]; then
|
|||||||
elif [[ $RELEASE_CHANNEL = "preview" ]]; then
|
elif [[ $RELEASE_CHANNEL = "preview" ]]; then
|
||||||
WARP_BIN="preview"
|
WARP_BIN="preview"
|
||||||
BINARY_NAME="warp-preview"
|
BINARY_NAME="warp-preview"
|
||||||
APP_NAME="WarpPreview"
|
APP_NAME="GalaxyPreview"
|
||||||
FEATURES="$FEATURES,preview_channel"
|
FEATURES="$FEATURES,preview_channel"
|
||||||
elif [[ $RELEASE_CHANNEL = "stable" ]]; then
|
elif [[ $RELEASE_CHANNEL = "stable" ]]; then
|
||||||
WARP_BIN="stable"
|
WARP_BIN="stable"
|
||||||
BINARY_NAME="warp"
|
BINARY_NAME="warp"
|
||||||
APP_NAME="Warp"
|
APP_NAME="Galaxy"
|
||||||
elif [[ $RELEASE_CHANNEL = "oss" ]]; then
|
elif [[ $RELEASE_CHANNEL = "oss" ]]; then
|
||||||
WARP_BIN="warp-oss"
|
WARP_BIN="warp-oss"
|
||||||
BINARY_NAME="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
|
# The OSS channel does not ship Sentry, so drop the crash_reporting feature
|
||||||
# (which would otherwise pull in the Sentry SDK as a dependency).
|
# (which would otherwise pull in the Sentry SDK as a dependency).
|
||||||
FEATURES="release_bundle"
|
FEATURES="release_bundle"
|
||||||
|
|||||||
+15
-15
@@ -270,9 +270,9 @@ fi
|
|||||||
|
|
||||||
if [[ $RELEASE_CHANNEL = "local" ]]; then
|
if [[ $RELEASE_CHANNEL = "local" ]]; then
|
||||||
WARP_BIN="galaxy-ai"
|
WARP_BIN="galaxy-ai"
|
||||||
BUNDLE_ID="com.samsung.GalaxyAI-Local"
|
BUNDLE_ID="com.samsung.Galaxy-Local"
|
||||||
WARP_APP_NAME="GalaxyAI"
|
WARP_APP_NAME="Galaxy"
|
||||||
WARP_SCHEME_NAME="galaxyai"
|
WARP_SCHEME_NAME="galaxy"
|
||||||
FEATURES="$FEATURES,agent_mode_debug"
|
FEATURES="$FEATURES,agent_mode_debug"
|
||||||
# For local builds, use different versions of our bundled frameworks (e.g.:
|
# For local builds, use different versions of our bundled frameworks (e.g.:
|
||||||
# Sentry). This needs to be exported so it can be referenced by
|
# 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"
|
export FRAMEWORK_OVERRIDE="dev"
|
||||||
elif [[ $RELEASE_CHANNEL = "dev" ]]; then
|
elif [[ $RELEASE_CHANNEL = "dev" ]]; then
|
||||||
WARP_BIN="dev"
|
WARP_BIN="dev"
|
||||||
BUNDLE_ID="com.samsung.GalaxyAI-Dev"
|
BUNDLE_ID="com.samsung.Galaxy-Dev"
|
||||||
WARP_APP_NAME="GalaxyAIDev"
|
WARP_APP_NAME="GalaxyDev"
|
||||||
WARP_SCHEME_NAME="galaxyaidev"
|
WARP_SCHEME_NAME="galaxydev"
|
||||||
FEATURES="$FEATURES,agent_mode_debug"
|
FEATURES="$FEATURES,agent_mode_debug"
|
||||||
# Enable heap usage tracking & profiling using jemalloc through pprof.
|
# Enable heap usage tracking & profiling using jemalloc through pprof.
|
||||||
FEATURES="$FEATURES,jemalloc_pprof,heap_usage_tracking"
|
FEATURES="$FEATURES,jemalloc_pprof,heap_usage_tracking"
|
||||||
@@ -293,22 +293,22 @@ elif [[ $RELEASE_CHANNEL = "dev" ]]; then
|
|||||||
export HANDLE_MARKDOWN=1
|
export HANDLE_MARKDOWN=1
|
||||||
elif [[ $RELEASE_CHANNEL = "preview" ]]; then
|
elif [[ $RELEASE_CHANNEL = "preview" ]]; then
|
||||||
WARP_BIN="preview"
|
WARP_BIN="preview"
|
||||||
BUNDLE_ID="com.samsung.GalaxyAI-Preview"
|
BUNDLE_ID="com.samsung.Galaxy-Preview"
|
||||||
WARP_APP_NAME="GalaxyAIPreview"
|
WARP_APP_NAME="GalaxyPreview"
|
||||||
WARP_SCHEME_NAME="galaxyaipreview"
|
WARP_SCHEME_NAME="galaxypreview"
|
||||||
FEATURES="$FEATURES,preview_channel"
|
FEATURES="$FEATURES,preview_channel"
|
||||||
# Enable heap usage tracking & profiling using jemalloc through pprof.
|
# Enable heap usage tracking & profiling using jemalloc through pprof.
|
||||||
FEATURES="$FEATURES,jemalloc_pprof,heap_usage_tracking"
|
FEATURES="$FEATURES,jemalloc_pprof,heap_usage_tracking"
|
||||||
elif [[ $RELEASE_CHANNEL = "stable" ]]; then
|
elif [[ $RELEASE_CHANNEL = "stable" ]]; then
|
||||||
WARP_BIN="stable"
|
WARP_BIN="stable"
|
||||||
BUNDLE_ID="com.samsung.GalaxyAI"
|
BUNDLE_ID="com.samsung.Galaxy"
|
||||||
WARP_APP_NAME="GalaxyAI"
|
WARP_APP_NAME="Galaxy"
|
||||||
WARP_SCHEME_NAME="galaxyai"
|
WARP_SCHEME_NAME="galaxy"
|
||||||
elif [[ $RELEASE_CHANNEL = "oss" ]]; then
|
elif [[ $RELEASE_CHANNEL = "oss" ]]; then
|
||||||
WARP_BIN="galaxy-ai-oss"
|
WARP_BIN="galaxy-ai-oss"
|
||||||
BUNDLE_ID="com.samsung.GalaxyAI"
|
BUNDLE_ID="com.samsung.Galaxy"
|
||||||
WARP_APP_NAME="GalaxyAI"
|
WARP_APP_NAME="Galaxy"
|
||||||
WARP_SCHEME_NAME="galaxyai"
|
WARP_SCHEME_NAME="galaxy"
|
||||||
# The OSS channel does not ship Sentry, so drop the cocoa_sentry feature
|
# The OSS channel does not ship Sentry, so drop the cocoa_sentry feature
|
||||||
# (which would otherwise pull in the Sentry framework dependency).
|
# (which would otherwise pull in the Sentry framework dependency).
|
||||||
FEATURES="release_bundle,extern_plist"
|
FEATURES="release_bundle,extern_plist"
|
||||||
|
|||||||
@@ -91,28 +91,28 @@ $BUNDLE_ID = "dev.warp.$app_name"
|
|||||||
if ("$CHANNEL" -eq 'local') {
|
if ("$CHANNEL" -eq 'local') {
|
||||||
$WARP_BIN = 'warp'
|
$WARP_BIN = 'warp'
|
||||||
$BINARY_NAME = 'warp.exe'
|
$BINARY_NAME = 'warp.exe'
|
||||||
$APP_NAME = 'WarpLocal'
|
$APP_NAME = 'GalaxyLocal'
|
||||||
$FEATURES = "$FEATURES,nld_improvements"
|
$FEATURES = "$FEATURES,nld_improvements"
|
||||||
} elseif ("$CHANNEL" -eq 'dev') {
|
} elseif ("$CHANNEL" -eq 'dev') {
|
||||||
$WARP_BIN = 'dev'
|
$WARP_BIN = 'dev'
|
||||||
$BINARY_NAME = 'dev.exe'
|
$BINARY_NAME = 'dev.exe'
|
||||||
$APP_NAME = 'WarpDev'
|
$APP_NAME = 'GalaxyDev'
|
||||||
$FEATURES = "$FEATURES,agent_mode_debug,nld_improvements"
|
$FEATURES = "$FEATURES,agent_mode_debug,nld_improvements"
|
||||||
} elseif ("$CHANNEL" -eq 'preview') {
|
} elseif ("$CHANNEL" -eq 'preview') {
|
||||||
$WARP_BIN = 'preview'
|
$WARP_BIN = 'preview'
|
||||||
$BINARY_NAME = 'preview.exe'
|
$BINARY_NAME = 'preview.exe'
|
||||||
$APP_NAME = 'WarpPreview'
|
$APP_NAME = 'GalaxyPreview'
|
||||||
$FEATURES = "$FEATURES,preview_channel,nld_improvements"
|
$FEATURES = "$FEATURES,preview_channel,nld_improvements"
|
||||||
} elseif ("$CHANNEL" -eq 'stable') {
|
} elseif ("$CHANNEL" -eq 'stable') {
|
||||||
$WARP_BIN = 'stable'
|
$WARP_BIN = 'stable'
|
||||||
$BINARY_NAME = 'warp.exe'
|
$BINARY_NAME = 'warp.exe'
|
||||||
$APP_NAME = 'Warp'
|
$APP_NAME = 'Galaxy'
|
||||||
# TODO(vorporeal): Remove this once we get tests passing with this default enabled.
|
# TODO(vorporeal): Remove this once we get tests passing with this default enabled.
|
||||||
$FEATURES = "$FEATURES,nld_improvements"
|
$FEATURES = "$FEATURES,nld_improvements"
|
||||||
} elseif ("$CHANNEL" -eq 'oss') {
|
} elseif ("$CHANNEL" -eq 'oss') {
|
||||||
$WARP_BIN = 'warp-oss'
|
$WARP_BIN = 'warp-oss'
|
||||||
$BINARY_NAME = 'warp-oss.exe'
|
$BINARY_NAME = 'warp-oss.exe'
|
||||||
$APP_NAME = 'WarpOss'
|
$APP_NAME = 'GalaxyOss'
|
||||||
# The OSS channel does not ship Sentry, so drop the crash_reporting feature
|
# The OSS channel does not ship Sentry, so drop the crash_reporting feature
|
||||||
# (which would otherwise pull in the Sentry SDK as a dependency).
|
# (which would otherwise pull in the Sentry SDK as a dependency).
|
||||||
$FEATURES = 'release_bundle,gui,nld_improvements'
|
$FEATURES = 'release_bundle,gui,nld_improvements'
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
#define MyAppPublisher "Denver Technologies, Inc."
|
#define MyAppPublisher "Denver Technologies, Inc."
|
||||||
#define MyAppURL "https://www.warp.dev/"
|
#define MyAppURL "https://www.warp.dev/"
|
||||||
#ifndef MyAppName
|
#ifndef MyAppName
|
||||||
#define MyAppName "WarpDev"
|
#define MyAppName "GalaxyDev"
|
||||||
#endif
|
#endif
|
||||||
#ifndef MyAppVersion
|
#ifndef MyAppVersion
|
||||||
#define MyAppVersion "0.1.0"
|
#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"""
|
Root: HKA; Subkey: "Software\Classes\Directory\Background\shell\{#MyAppName}Window\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""{#MyAppName}://action/new_window?path=%V"""
|
||||||
|
|
||||||
[Tasks]
|
[Tasks]
|
||||||
Name: addToPath; Description: "Add Warp to PATH"
|
Name: addToPath; Description: "Add Galaxy to PATH"
|
||||||
|
|
||||||
[UninstallDelete]
|
[UninstallDelete]
|
||||||
Type: filesandordirs; Name: "{userappdata}\warp\{#MyAppName}"
|
Type: filesandordirs; Name: "{userappdata}\warp\{#MyAppName}"
|
||||||
|
|||||||
Reference in New Issue
Block a user