Rebrand to Galaxy, major improvements to Bedrock support, still needs some TLC though

This commit is contained in:
Ryan Ward
2026-05-07 11:29:34 -05:00
parent f4e2475c60
commit a41cbd8cc7
2433 changed files with 14208 additions and 9409 deletions
Generated
+941 -941
View File
File diff suppressed because it is too large Load Diff
+26 -26
View File
@@ -16,14 +16,14 @@ default-members = [
"crates/graphql",
"crates/markdown_parser",
"crates/sum_tree",
"crates/warpui",
"crates/warp_completer",
"crates/warp_terminal",
"crates/warp_util",
"crates/galaxyui",
"crates/galaxy_completer",
"crates/galaxy_terminal",
"crates/galaxy_util",
]
[workspace.package]
authors = ["Warp Team <dev@warp.dev>"]
authors = ["Ryan Ward <ryan.ward@samsung.com>"]
license = "AGPL-3.0-only"
publish = false
@@ -67,28 +67,28 @@ ui_components = { path = "crates/ui_components" }
vim = { path = "crates/vim" }
virtual-fs = { path = "crates/virtual_fs" }
voice_input = { path = "crates/voice_input" }
warp = { path = "app" }
warp_cli = { path = "crates/warp_cli" }
warp_completer = { path = "crates/warp_completer" }
warp_core = { path = "crates/warp_core" }
warp_editor = { path = "crates/editor" }
warp_features = { path = "crates/warp_features" }
galaxy = { path = "app" }
galaxy_cli = { path = "crates/galaxy_cli" }
galaxy_completer = { path = "crates/galaxy_completer" }
galaxy_core = { path = "crates/galaxy_core" }
galaxy_editor = { path = "crates/editor" }
galaxy_features = { path = "crates/galaxy_features" }
remote_server = { path = "crates/remote_server" }
warp_files = { path = "crates/warp_files" }
warp_graphql = { path = "crates/graphql" }
warp_graphql_schema = { path = "crates/warp_graphql_schema" }
warp_isolation_platform = { path = "crates/isolation_platform" }
warp_js = { path = "crates/warp_js" }
warp_logging = { path = "crates/warp_logging" }
warp_managed_secrets = { path = "crates/managed_secrets" }
warp_ripgrep = { path = "crates/warp_ripgrep" }
warp_server_client = { path = "crates/warp_server_client" }
warp_terminal = { path = "crates/warp_terminal" }
warp_util = { path = "crates/warp_util" }
warp_web_event_bus = { path = "crates/warp_web_event_bus" }
warpui = { path = "crates/warpui" }
warpui_core = { path = "crates/warpui_core" }
warpui_extras = { path = "crates/warpui_extras", default-features = false }
galaxy_files = { path = "crates/galaxy_files" }
galaxy_graphql = { path = "crates/graphql" }
galaxy_graphql_schema = { path = "crates/galaxy_graphql_schema" }
galaxy_isolation_platform = { path = "crates/isolation_platform" }
galaxy_js = { path = "crates/galaxy_js" }
galaxy_logging = { path = "crates/galaxy_logging" }
galaxy_managed_secrets = { path = "crates/managed_secrets" }
galaxy_ripgrep = { path = "crates/galaxy_ripgrep" }
galaxy_server_client = { path = "crates/galaxy_server_client" }
galaxy_terminal = { path = "crates/galaxy_terminal" }
galaxy_util = { path = "crates/galaxy_util" }
galaxy_web_event_bus = { path = "crates/galaxy_web_event_bus" }
galaxyui = { path = "crates/galaxyui" }
galaxyui_core = { path = "crates/galaxyui_core" }
galaxyui_extras = { path = "crates/galaxyui_extras", default-features = false }
watcher = { path = "crates/watcher" }
websocket = { path = "crates/websocket" }
+410
View File
@@ -0,0 +1,410 @@
# Galaxy AI — Codebase Review
> **Generated:** 2026-05-07
> **Branch state:** HEAD detached at `f4e2475` ("Rebasing, going about this another way")
> **Scope:** ~55 files with uncommitted modifications reviewed for gaps, inconsistencies, and improvement opportunities.
> **Purpose:** Reference document for agents continuing this work. No code changes were made during this review.
---
## Table of Contents
1. [Executive Summary](#1-executive-summary)
2. [Branding Rebrand — Warp → Galaxy AI](#2-branding-rebrand--warp--galaxy-ai)
3. [Environment Variable Renames — WARP_ → GALAXY_](#3-environment-variable-renames--warp_--galaxy_)
4. [Config & Path Changes](#4-config--path-changes)
5. [Bedrock AI Feature](#5-bedrock-ai-feature)
6. [Samsung Themes & UI Font](#6-samsung-themes--ui-font)
7. [Autoupdate Changes](#7-autoupdate-changes)
8. [Unreviewed Files](#8-unreviewed-files)
9. [Crate Naming Inconsistency](#9-crate-naming-inconsistency)
10. [Prioritized Gap List](#10-prioritized-gap-list)
11. [Improvement Opportunities](#11-improvement-opportunities)
---
## 1. Executive Summary
This branch implements three major workstreams:
1. **Rebrand** — Surface-level rename from "Warp" → "Galaxy AI" for Samsung product identity.
2. **Bedrock AI** — New direct AWS Bedrock call path as an alternative/fallback to the Warp server AI path, including new slash command handlers, stream normalization, and a diagnostic logger.
3. **Samsung Themes & UI Font** — New `SamsungDark`/`SamsungLight` themes and a `ui_font_name` setting for brand presets.
The rebrand is **partially complete**. Several environment variable renames are missing on Windows code paths, and many `warp.dev` URLs remain untouched. There is a **critical runtime inconsistency** in integration test detection (`WARP_INTEGRATION` vs `GALAXY_INTEGRATION`) that will break integration test mode. The Bedrock feature is substantive and generally well-constructed, but has several reliability and API design concerns documented below.
---
## 2. Branding Rebrand — Warp → Galaxy AI
### ✅ Completed Correctly
| File | Change |
|---|---|
| `app/src/app_menus.rs` | Menu title `"Warp"``"Galaxy AI"` |
| `app/src/root_view.rs` | `WINDOW_TITLE``"Galaxy AI"`, welcome message updated |
| `app/src/ai_assistant/mod.rs` | `AI_ASSISTANT_FEATURE_NAME``"Galaxy AI"`, `ASK_AI_ASSISTANT_TEXT` updated |
| `app/src/ai_assistant/panel.rs` | `"Restart Warp AI"``"Restart Galaxy AI"` (2 places) |
| `app/src/ai/harness_display.rs` | `"Warp Agent"``"Galaxy Agent"` |
| `app/src/settings_view/ai_page.rs` | Agent labels updated throughout |
| `app/src/settings_view/about_page.rs` | Logo SVG → `bedrock.svg`, copyright → Samsung Electronics Co., Ltd. |
| `app/src/workspace/mod.rs` | `"Warp Drive"``"Galaxy Drive"` throughout |
| `app/src/workspace/view.rs` | Update prompt, Drive references updated |
| `app/src/search/data_source.rs` | Drive filter label updated |
| `app/src/uri/browser_url_handler.rs` | `DEFAULT_TITLE``"Galaxy AI"` |
| `app/src/bin/local.rs` | CFBundle* keys → Samsung/GalaxyAI |
| `app/src/bin/oss.rs` | CFBundle* keys → Samsung/GalaxyAI, AppId updated |
| `crates/warp_core/src/channel/mod.rs` | CLI command names `oz``galaxy-ai` |
### ❌ Gaps — Remaining "Warp" References
#### UI / Window Titles
- **`app/src/root_view.rs` lines 797, 840, 892, 1264, 1449** — Still use `title: Some("Warp".to_owned())`. These are dialog/modal window titles. Need: `"Galaxy AI"`.
- **`app/src/workflows/local_workflows.rs:227`** — `author: Some("Warp".into())` for local workflows author attribution.
#### Enum Values (May Be Intentional — Verify)
- **`app/src/terminal/view/ambient_agent/host_selector.rs:48`** — `Host::Warp => "Warp"` — Display label for an enum variant. If the `Host::Warp` variant is kept for protocol compatibility, the display label may still need updating.
- **`app/src/ai/mcp/mod.rs:76`** — `MCPProvider::Warp => "Warp"` — MCP provider display name. If Warp MCP is still a valid provider, this may be intentional.
- **`app/src/settings_view/appearance_page.rs:3459`** — `RadioButtonItem::text("Warp")` — Context unclear; needs investigation.
#### External Editor / OAuth
- **`app/src/settings_view/features/external_editor.rs:157,179`** — `"Warp"` as an editor choice. Refers to using Warp itself as the external editor; likely intentional but should be verified.
- **`app/src/ai/mcp/templatable_manager/oauth.rs:306,324`** — `"Warp"` as OAuth client name. If this is sent to an external OAuth provider, it must be updated to `"Galaxy AI"`.
#### Windows Startup Registry
- **`app/src/login_item/windows.rs`** — Multiple `"Warp"` registry key names for Windows startup login item. These control Windows startup behavior and must be updated to avoid conflicts with the actual Warp app if both are installed.
#### URLs — All Still Point to `warp.dev`
These are all unmodified and need new Samsung/Galaxy AI target URLs:
| File | URL(s) |
|---|---|
| `app/src/util/links.rs` | All doc, privacy, slack URLs — `warp.dev` |
| `app/src/resource_center/sections.rs` | `docs.warp.dev` |
| `app/src/resource_center/section_views/changelog_section.rs` | `docs.warp.dev/changelog` |
| `app/src/auth/auth_view_shared_helpers.rs:29` | `https://warp.dev/privacy` |
| `app/src/launch_configs/save_modal.rs:533` | `docs.warp.dev` |
| `app/src/wasm_nux_dialog.rs` | `app.warp.dev`, `www.warp.dev` |
| `app/src/integration_testing/agent_mode/mod.rs` | `staging.warp.dev` |
| `app/src/cloud_object/mod.rs` | `warp.dev/drive/` in comment, `joan@warp.dev` example email |
#### Stale Comment
- **`app/src/workspace/view.rs:546`** — Comment still reads: *"Use the word 'Warp'..."* — should be updated or removed.
#### Referral Theme Display Names
- **`app/src/themes/theme.rs`** — `ThemeKind::SentReferralReward` displays as `"Warp Referral"` and `ThemeKind::ReceivedReferralReward` displays as `"Referred to Warp"`. Not updated.
---
## 3. Environment Variable Renames — WARP_ → GALAXY_
### ✅ Completed Correctly
| Old Name | New Name | File |
|---|---|---|
| `WARP_SERVER_ROOT_URL` | `GALAXY_SERVER_ROOT_URL` | `crates/warp_cli/src/lib.rs` |
| `WARP_WS_SERVER_URL` | `GALAXY_WS_SERVER_URL` | `crates/warp_cli/src/lib.rs` |
| `WARP_SESSION_SHARING_SERVER_URL` | `GALAXY_SESSION_SHARING_SERVER_URL` | `crates/warp_cli/src/lib.rs` |
| `WARP_API_KEY` | `GALAXY_API_KEY` | `crates/warp_cli/src/lib.rs` |
| `WARP_OUTPUT_FORMAT` | `GALAXY_OUTPUT_FORMAT` | `crates/warp_cli/src/lib.rs` |
| `WARP_SHELL_PATH` | `GALAXY_SHELL_PATH` | `crates/warp_util/src/path.rs` |
| `WARP_INTEGRATION` | `GALAXY_INTEGRATION` | `crates/warp_logging/src/native.rs` |
| `WARP_EXTRA_HTTP_HEADERS` | `GALAXY_EXTRA_HTTP_HEADERS` | `crates/http_client/src/lib.rs` |
| `WARP_CLIENT_VERSION` | `GALAXY_CLIENT_VERSION` | `app/src/terminal/local_tty/unix.rs` |
| `WARP_USE_SSH_WRAPPER` | `GALAXY_USE_SSH_WRAPPER` | `app/src/terminal/local_tty/unix.rs` |
| `WARP_IS_LOCAL_SHELL_SESSION` | `GALAXY_IS_LOCAL_SHELL_SESSION` | `app/src/terminal/local_tty/unix.rs` |
| `WARP_CLI_AGENT_PROTOCOL_VERSION` | `GALAXY_CLI_AGENT_PROTOCOL_VERSION` | `app/src/terminal/local_tty/unix.rs` |
| `WARP_SHELL_DEBUG_MODE` | `GALAXY_SHELL_DEBUG_MODE` | `app/src/terminal/local_tty/unix.rs` |
| `WARP_HONOR_PS1` | `GALAXY_HONOR_PS1` | `app/src/terminal/local_tty/unix.rs` |
| `WARP_PATH_APPEND` | `GALAXY_PATH_APPEND` | `app/src/terminal/local_tty/unix.rs` |
| `WARP_INITIAL_HISTFILESIZE` | `GALAXY_INITIAL_HISTFILESIZE` | `app/src/terminal/local_tty/unix.rs` |
| `WARP_INITIAL_WORKING_DIR` | `GALAXY_INITIAL_WORKING_DIR` | `app/src/terminal/local_tty/unix.rs` |
| `WARP_CLOUD_MODE_DEFAULT_HOST` | `GALAXY_CLOUD_MODE_DEFAULT_HOST` | `app/src/terminal/view/ambient_agent/model.rs` |
### ❌ CRITICAL: `WARP_INTEGRATION` Split
**`app/src/lib.rs:658`** still reads `WARP_INTEGRATION`, but `crates/warp_logging/src/native.rs` was updated to `GALAXY_INTEGRATION`. These two reads must match or integration test detection will silently fail — the app won't recognize it's running in integration test mode even when `GALAXY_INTEGRATION=1` is set.
**Fix:** Update `app/src/lib.rs:658` to read `GALAXY_INTEGRATION`.
### ❌ Missing Renames
#### Windows TTY Path (Complete Gap)
`app/src/terminal/local_tty/windows/environment.rs`**ALL** of these env vars are still using `WARP_*` names (lines 2027, 105116). The Unix path was updated but Windows was skipped entirely:
- `WARP_HONOR_PS1`
- `WARP_INITIAL_WORKING_DIR`
- `WARP_USE_SSH_WRAPPER`
- `WARP_SHELL_DEBUG_MODE`
- `WARP_IS_LOCAL_SHELL_SESSION`
- `WARP_PATH_APPEND`
- `WARP_CLIENT_VERSION`
- `WARP_CLI_AGENT_PROTOCOL_VERSION`
#### Other Missing Renames
| File | Env Var | Priority |
|---|---|---|
| `app/src/lib.rs:643` | `WARP_CLI_MODE` | High |
| `app/src/lib.rs:658` | `WARP_INTEGRATION` | **CRITICAL** |
| `app/src/lib.rs:866` | `WARP_ENABLE_WAYLAND` | Medium |
| `app/src/plugin/mod.rs:17` | `WARP_PLUGIN_HOST_ADDRESS` | High |
| `app/src/terminal/remote_tty/event_loop.rs:179` | `WARP_HONOR_PS1` | High |
| `app/src/autoupdate/channel_versions.rs:20` | `WARP_CHANNEL_VERSIONS_PATH` | Medium |
| `app/src/autoupdate/mac.rs:150-151` | `WARP_CHANNEL_VERSIONS_PATH` | Medium |
| `app/src/autoupdate/linux.rs:153-154` | `WARP_CHANNEL_VERSIONS_PATH` | Medium |
| `app/src/auth/auth_state.rs:107` | `WARP_USER_SECRET` (build-time) | Medium |
| `app/src/settings/debug.rs:5` | Comment only — `WARP_SHELL_DEBUG_MODE` | Low |
---
## 4. Config & Path Changes
### Config Directory Migration Chain
**`crates/warp_core/src/paths.rs`** was updated:
- `WARP_CONFIG_DIR``.galaxy-ai`
- `LEGACY_WARP_CONFIG_DIR``.warp-core`
**Problem:** The migration chain is now: `.warp-core``.galaxy-ai`
However, the original legacy path `.warp` needs to be in the migration chain. Users with an original Warp installation who never ran `.warp-core` will have their config in `.warp`. The current code only migrates from `.warp-core`, so original Warp users will lose their settings on first launch of Galaxy AI.
**Recommendation:** Add a third legacy entry for `.warp` (the original Warp config dir) so the full chain is preserved: `.warp` (original Warp) → `.warp-core` (intermediate) → `.galaxy-ai` (current). Verify if this was already handled via a separate legacy migration step before assuming it's missing.
### Server Config Cleared
**`crates/warp_core/src/channel/config.rs`** — All production server URLs have been cleared to empty strings:
- `server_root_url = ""`
- `rtc_server_url = ""`
- `session_sharing_server_url = ""`
- `firebase_auth_api_key` = `None`
- `oz_root_url = ""`
This appears intentional — the Samsung/Galaxy AI deployment won't use the Warp backend. The related fallback behavior in `channel/state.rs` and `server/server_api.rs` (silently falling back to `http://localhost` when URL is empty) handles this gracefully for Bedrock-only operation.
**Concern:** If any codepath still requires server connectivity (e.g., sync, Drive, auth), it will silently talk to localhost and fail without a clear error. Consider surfacing a more descriptive error when server config is intentionally empty and a server-dependent feature is attempted.
---
## 5. Bedrock AI Feature
This is the primary new feature. A complete AWS Bedrock direct-call path runs alongside (and as an alternative to) the Warp server AI path.
### New Files
| File | Purpose |
|---|---|
| `app/src/ai/bedrock/diagnostic.rs` | `BedrockDiagnosticLogger` — file-based diagnostic logging, activated via `GALAXY_BEDROCK_DIAGNOSTICS=1`, 10MB rotation |
| `app/src/ai/bedrock/e2e_tests.rs` | Comprehensive E2E integration tests (requires `BEDROCK_INTEGRATION_TEST` env var) |
| `app/src/ai/bedrock/integration_tests.rs` | Unit-level stream output collection tests |
### Modified Files
| File | Key Change |
|---|---|
| `app/src/ai/bedrock/client.rs` | Added `needs_create_task: bool` and `diagnostic_logger` params to `converse_stream()` |
| `app/src/ai/bedrock/convert.rs` | Added `Clone`, `Debug`, `PartialEq` derives to core types |
| `app/src/ai/bedrock/convert_request.rs` | New input type handlers: `InitProjectRules`, `CreateEnvironment`, `CreateNewProject`, `CloneRepository`, `AutoCodeDiffQuery`, `ResumeConversation`, `QueryWithCannedResponse`, `CodeReview` |
| `app/src/ai/bedrock/stream.rs` | Buffered text flush threshold, `needs_create_task` / `CreateTask` event, reasoning content discarded |
| `app/src/ai/agent/api/impl.rs` | `needs_create_task` detection, diagnostic logger wiring, verbose debug logging |
| `app/src/ai/llms.rs` | Bedrock models added to `coding` and `cli_agent` feature slots (previously only `agent_mode`) |
### Concerns & Gaps
#### 🔴 Critical
**`WARP_INTEGRATION` / `GALAXY_INTEGRATION` split** (also listed in §3) — The diagnostic logger in `diagnostic.rs` and the integration test detection in `app/src/lib.rs` use different env var names. This is already flagged under §3 but bears repeating here as it directly affects Bedrock E2E test execution.
#### 🟠 High
**`needs_create_task` detection logic** (`app/src/ai/agent/api/impl.rs`)
Detected via `task_context.tasks.is_empty()`. If the tasks list is populated with a placeholder or shell task entry before the first real task is submitted, this flag will be `false` and `CreateTask` will never be emitted, silently breaking the task creation flow for Bedrock on the first turn.
**E2E test tool_use_id mismatch** (`app/src/ai/bedrock/e2e_tests.rs`)
In `test_agent_multi_turn_tool_use_produces_output`, the test synthesizes tool result IDs as `tool_{total_turns}`, but the actual tool call ID emitted from the stream is a different value. This means the tool_call_id round-trip assertion will fail or be skipped silently. The test may pass vacuously.
**`ensure_tool_results_paired()` synthesized results** (`app/src/ai/bedrock/convert_request.rs`)
This function inserts placeholder tool results for orphaned tool calls. The synthesized content is empty/default, which could confuse the model on subsequent turns. The synthesized result should include a meaningful message like `"Tool result not available"` rather than empty content.
#### 🟡 Medium
**`TEXT_FLUSH_THRESHOLD = 20`** (`app/src/ai/bedrock/stream.rs`)
Text fragments shorter than 20 characters before a tool call boundary are silently discarded. This can drop model preamble text such as `"Let me look at that..."` or `"OK."`. Consider buffering until a natural boundary (tool call or stop event) rather than a character threshold, or surface buffered content even if short.
**`converse_stream()` wide parameter surface** (`app/src/ai/bedrock/client.rs`)
The function now takes 9 parameters including `needs_create_task` in the middle of the list. This is fragile and hard to read at call sites. Recommend grouping into a `BedrockConversationConfig` struct.
**Diagnostic logger privacy concern** (`app/src/ai/bedrock/diagnostic.rs`)
`log_protobuf_input` uses Rust's `{:?}` debug format rather than structured JSON. This is inconsistent with the rest of the logger (which emits JSON) and may dump sensitive content (full conversation history, file contents) to disk in an unstructured format. Consider either JSON serialization or explicit redaction.
#### 🟢 Low
**Reasoning content silently discarded** (`app/src/ai/bedrock/stream.rs`)
Reasoning/thinking content from models that emit it (e.g., Claude 3.7 extended thinking) is currently discarded. This is an intentional product decision but should be documented in a comment so future contributors understand why.
**`diagnostic.rs` log path** — Uses `warp_logging::log_directory()`. The log file will land in the `warp_logging`-configured directory. Verify this resolves to the correct Galaxy AI log directory on all platforms.
---
## 6. Samsung Themes & UI Font
### New Additions
- **`app/src/themes/default_themes.rs`** — `samsung_dark()` and `samsung_light()` theme functions with full ANSI color palettes.
- **`app/src/themes/theme.rs`** — `ThemeKind::SamsungDark` and `ThemeKind::SamsungLight` enum variants.
- **`app/src/settings/font.rs`** — `DEFAULT_UI_FONT_NAME: &str = ""` constant; new `ui_font_name` setting persisted at `appearance.text.ui_font_name`.
- **`app/src/settings_view/appearance_page.rs`** — `UIFontWidget`, `BrandPresetWidget`, `SetUIFontFamily(String)` action, `ApplySamsungBrandPreset` action.
- **`app/src/appearance.rs`** — `FontSettingsChangedEvent::UIFontName` handler; `set_ui_font_family()` called at init and on change.
### Concerns
**`DEFAULT_UI_FONT_NAME = ""`** — Empty string used as sentinel for "system default font". This works but is a code smell. Recommend `Option<String>` or a named constant like `"system"` that is clearly documented as the system default sentinel.
**`apply_samsung_brand_preset()` not fully reviewed** — The function is referenced in the appearance page but its full implementation wasn't visible in the reviewed diffs. Ensure it sets both font and theme atomically (not partially applied).
**Referral theme display names not updated**`ThemeKind::SentReferralReward``"Warp Referral"` and `ThemeKind::ReceivedReferralReward``"Referred to Warp"`. These should be updated to Galaxy AI equivalents.
---
## 7. Autoupdate Changes
`app/src/autoupdate/mac.rs` and `app/src/autoupdate/windows.rs` are modified per `git status` but were not fully reviewed. Key finding:
- **`WARP_CHANNEL_VERSIONS_PATH`** env var is NOT renamed in any of the autoupdate files (`channel_versions.rs`, `mac.rs`, `linux.rs`). This means the auto-update channel selection won't respect the renamed env var.
---
## 8. Unreviewed Files
The following files appeared in `git status` but were not reviewed during this pass:
| File | Likely Purpose |
|---|---|
| `crates/warpui/src/rendering/wgpu/mod.rs` | Unknown — possibly rendering/branding change |
| `crates/warpui/src/windowing/winit/delegate.rs` | Unknown — possibly window title or branding |
| `crates/integration/src/test.rs` | Integration test framework — possibly `GALAXY_INTEGRATION` wiring |
| `script/macos/bundle` | macOS bundle script — likely bundle ID / app name |
| `app/DockTilePlugin/Info.plist` | macOS Dock tile plugin — likely bundle ID / display name |
| `app/build.rs` | Cargo build script — likely binary name, bundle ID, version |
| `app/assets/bundled/svg/bedrock.svg` | New Bedrock/Samsung logo SVG asset |
| `app/assets/Galaxy_AI_Logo.jpg` | New logo asset |
| `app/assets/Galaxy_AI_Logo.png` | New logo asset |
**These files must be reviewed** before this branch is considered complete. The `build.rs` in particular often controls bundle identifiers and binary names critical to the rebrand.
---
## 9. Crate Naming Inconsistency
All internal crates retain `warp_*` naming:
- `warp_core`
- `warpui`
- `warp_logging`
- `warp_cli`
- `warp_util`
- `warp_multi_agent_api`
**Decision needed:** Is keeping `warp_*` crate names intentional (for internal stability / CI continuity) or an oversight? If Samsung intends to publish or open-source these crates under Galaxy AI branding, the crate names should be renamed. If they are purely internal, keeping `warp_*` is acceptable but should be documented explicitly in `WARP.md` or `README.md` to avoid future confusion.
---
## 10. Prioritized Gap List
### 🔴 Critical — Fix Before Ship
| # | Issue | File(s) |
|---|---|---|
| C1 | `WARP_INTEGRATION` / `GALAXY_INTEGRATION` split — breaks integration test detection at runtime | `app/src/lib.rs:658` |
| C2 | Windows TTY env vars completely skipped — Windows shell integration broken | `app/src/terminal/local_tty/windows/environment.rs` |
| C3 | E2E test tool_use_id mismatch — multi-turn tool use test may be vacuously passing | `app/src/ai/bedrock/e2e_tests.rs` |
### 🟠 High — Fix Before Beta
| # | Issue | File(s) |
|---|---|---|
| H1 | `needs_create_task` false negative if task list pre-populated | `app/src/ai/agent/api/impl.rs` |
| H2 | `WARP_CLI_MODE`, `WARP_ENABLE_WAYLAND`, `WARP_PLUGIN_HOST_ADDRESS` not renamed | `app/src/lib.rs`, `app/src/plugin/mod.rs` |
| H3 | Remote TTY `WARP_HONOR_PS1` not renamed | `app/src/terminal/remote_tty/event_loop.rs:179` |
| H4 | OAuth client name still `"Warp"` — sent to external providers | `app/src/ai/mcp/templatable_manager/oauth.rs` |
| H5 | Windows registry login item still uses `"Warp"` key names | `app/src/login_item/windows.rs` |
| H6 | Unreviewed files — `build.rs`, `DockTilePlugin/Info.plist`, `script/macos/bundle` | See §8 |
| H7 | Config migration chain may leave original `.warp` users without migrated settings | `crates/warp_core/src/paths.rs` |
### 🟡 Medium — Fix Before GA
| # | Issue | File(s) |
|---|---|---|
| M1 | All `warp.dev` URLs untouched — wrong privacy policy, docs, and external links | `app/src/util/links.rs` + 7 other files |
| M2 | `converse_stream()` 9-param signature — should use config struct | `app/src/ai/bedrock/client.rs` |
| M3 | `TEXT_FLUSH_THRESHOLD = 20` may silently discard model preamble text | `app/src/ai/bedrock/stream.rs` |
| M4 | `ensure_tool_results_paired()` synthesizes empty tool results — may confuse model | `app/src/ai/bedrock/convert_request.rs` |
| M5 | `WARP_CHANNEL_VERSIONS_PATH` not renamed in autoupdate | `app/src/autoupdate/` |
| M6 | Diagnostic logger `log_protobuf_input` uses debug format, not JSON | `app/src/ai/bedrock/diagnostic.rs` |
| M7 | `WARP_USER_SECRET` build-time env not renamed | `app/src/auth/auth_state.rs:107` |
| M8 | `DEFAULT_UI_FONT_NAME = ""` sentinel is a code smell | `app/src/settings/font.rs` |
| M9 | Referral theme display names still say `"Warp Referral"` | `app/src/themes/theme.rs` |
| M10 | Root view dialog titles still `"Warp"` (5 locations) | `app/src/root_view.rs` |
| M11 | Local workflow author still `"Warp"` | `app/src/workflows/local_workflows.rs:227` |
### 🟢 Low — Polish / Documentation
| # | Issue | File(s) |
|---|---|---|
| L1 | Stale comment: *"Use the word 'Warp'..."* | `app/src/workspace/view.rs:546` |
| L2 | Reasoning content discard should be documented with a comment | `app/src/ai/bedrock/stream.rs` |
| L3 | `warp_*` crate naming — document intent (internal stable vs. rebrand needed) | All `Cargo.toml` files |
| L4 | `apply_samsung_brand_preset()` full implementation not reviewed | `app/src/settings_view/appearance_page.rs` |
| L5 | `WARP.md` build commands still reference `cargo bundle --bin warp` — should be updated | `WARP.md` |
| L6 | `RadioButtonItem::text("Warp")` in appearance page — context unclear | `app/src/settings_view/appearance_page.rs:3459` |
| L7 | Comment-only `WARP_SHELL_DEBUG_MODE` ref | `app/src/settings/debug.rs:5` |
---
## 11. Improvement Opportunities
### Bedrock API Design
**`BedrockConversationConfig` struct** — The `converse_stream()` function now takes 9 parameters. Create a config struct:
```rust
pub struct BedrockConversationConfig {
pub messages: Vec<ConversationMessage>,
pub tools: Vec<ToolDefinition>,
pub system_prompt: Option<String>,
pub model_id: String,
pub needs_create_task: bool,
pub diagnostic_logger: Option<Arc<BedrockDiagnosticLogger>>,
// ...
}
```
**Stream text buffering** — Instead of the character threshold approach (`TEXT_FLUSH_THRESHOLD = 20`), consider accumulating text until a semantic boundary (tool call start, stop event, or a configurable flush interval). This avoids the silent text discard problem.
**Synthesized tool results** — When `ensure_tool_results_paired()` synthesizes a tool result for an orphaned call, inject a meaningful error message in the content rather than empty content:
```rust
content: "Error: tool result was not provided for this tool call".to_string()
```
### Diagnostic Logger
**Structured logging** — Replace `{:?}` debug format in `log_protobuf_input` with proper JSON serialization. Consider using `serde_json` for consistent structured output across all log methods.
**Redaction** — The diagnostic logger logs the full conversation including user messages and file contents. Add a redaction layer or at minimum document that `GALAXY_BEDROCK_DIAGNOSTICS=1` is a developer-only flag not intended for production use.
### Settings & Themes
**`Option<String>` for UI font** — Replace `DEFAULT_UI_FONT_NAME = ""` with `Option<String>` where `None` means system default. This is more idiomatic Rust and avoids the empty string sentinel.
**Samsung brand preset atomicity** — Ensure `apply_samsung_brand_preset()` applies theme and font in a single transaction to avoid intermediate UI state where only one of the two is applied.
### Error Handling for Empty Server Config
When `server_root_url` is intentionally empty (the Galaxy AI deployment case), and a server-dependent feature (Drive, sync, auth) is attempted, the app currently falls back silently to `http://localhost`. Add a specific error variant or user-facing message for this case:
> *"This feature requires a Warp server connection which is not configured in this build."*
### Documentation
- Document the `warp_*` crate naming decision in `WARP.md` or `README.md`.
- Document `GALAXY_BEDROCK_DIAGNOSTICS=1` in `WARP.md` as a development diagnostic flag.
- Add a comment in `stream.rs` explaining why reasoning content is discarded.
- Update `WARP.md` build commands to reference the Galaxy AI binary name (if renamed).
+9
View File
@@ -178,3 +178,12 @@ if FeatureFlag::YourNewFeature.is_enabled() {
### Exhaustive Matching
When adding/editing match statements, avoid using the wildcard _ when at all possible. Exhaustive matching is helpful for ensuring that all variants are handled, especially when adding new variants to enums in the future.
### Appearance Settings Notes
- Samsung-inspired built-in themes are available as `SamsungDark` and `SamsungLight`.
- UI font selection is persisted in `appearance.text.ui_font_name` and uses an empty string as the system-default sentinel.
- The one-click Samsung brand preset is implemented in `app/src/settings_view/appearance_page.rs` and applies:
- Samsung dark/light theme mapping
- terminal + AI font defaults
- a best-available Samsung-style UI font fallback
+46 -46
View File
@@ -1,16 +1,16 @@
[package]
authors = ["Warp Team <dev@warp.dev>"]
default-run = "warp-oss"
description = "The cloud-backed terminal for individuals and teams"
authors = ["Ryan Ward <ryan.ward@samsung.com>"]
default-run = "galaxy-ai-oss"
description = "Galaxy AI - AI-powered terminal for development teams"
edition = "2021"
autobins = false
name = "warp"
name = "galaxy"
version = "0.1.0"
publish.workspace = true
license.workspace = true
[lib]
name = "warp"
name = "galaxy"
path = "src/lib.rs"
# We define separate targets for each channel (stable, preview, dev) so that we can
@@ -18,12 +18,12 @@ path = "src/lib.rs"
# flag overrides). Otherwise these binaries are exactly identical to our main binary.
[[bin]]
name = "warp-oss"
name = "galaxy-ai-oss"
path = "src/bin/oss.rs"
test = false
[[bin]]
name = "warp"
name = "galaxy-ai"
path = "src/bin/local.rs"
test = false
@@ -134,7 +134,7 @@ line-ending.workspace = true
log.workspace = true
log-panics = { version = "2.1.0", features = ["with-backtrace"] }
lsp.workspace = true
warp_logging.workspace = true
galaxy_logging.workspace = true
sentry = { workspace = true, optional = true }
lz4_flex = "0.11"
markdown_parser.workspace = true
@@ -207,7 +207,7 @@ unindent = "0.1.7"
url = { workspace = true, features = ["serde"] }
urlocator.workspace = true
uuid.workspace = true
warp_cli.workspace = true
galaxy_cli.workspace = true
validator = "0.19.0"
variant_count = "1.1.0"
vec1.workspace = true
@@ -215,19 +215,19 @@ version-compare.workspace = true
vte.workspace = true
walkdir.workspace = true
warp-workflows.workspace = true
warp_completer.workspace = true
warp_core.workspace = true
warp_editor.workspace = true
warp_graphql.workspace = true
warp_js = { workspace = true, optional = true }
warp_server_client.workspace = true
warp_util.workspace = true
warpui = { workspace = true, features = ["schema_gen", "settings_value"] }
galaxy_completer.workspace = true
galaxy_core.workspace = true
galaxy_editor.workspace = true
galaxy_graphql.workspace = true
galaxy_js = { workspace = true, optional = true }
galaxy_server_client.workspace = true
galaxy_util.workspace = true
galaxyui = { workspace = true, features = ["schema_gen", "settings_value"] }
voice_input = { workspace = true, optional = true }
warpui_extras = { workspace = true, features = ["default", "user_preferences-toml"] }
galaxyui_extras = { workspace = true, features = ["default", "user_preferences-toml"] }
syntax_tree.workspace = true
languages.workspace = true
warp_terminal.workspace = true
galaxy_terminal.workspace = true
websocket.workspace = true
wgpu = { workspace = true, optional = true }
natural_language_detection.workspace = true
@@ -246,9 +246,9 @@ remote_server.workspace = true
repo_metadata.workspace = true
vim.workspace = true
rmcp = { workspace = true, features = ["client"] }
warp_isolation_platform.workspace = true
warp_ripgrep.workspace = true
warp_managed_secrets.workspace = true
galaxy_isolation_platform.workspace = true
galaxy_ripgrep.workspace = true
galaxy_managed_secrets.workspace = true
[target.'cfg(target_os = "macos")'.dependencies]
block.workspace = true
@@ -308,7 +308,7 @@ warp-command-signatures = { workspace = true, features = ["embed-signatures"] }
is_executable = "1.0.1"
gethostname = "1.1.0"
watcher.workspace = true
warp_files.workspace = true
galaxy_files.workspace = true
tantivy = "0.26.0"
[target.'cfg(target_family = "wasm")'.dependencies]
@@ -333,7 +333,7 @@ serde-wasm-bindgen = "0.6.5"
# For wasm, we don't use the feature "embed-signatures".
warp-command-signatures = { workspace = true }
web-sys.workspace = true
warp_web_event_bus.workspace = true
galaxy_web_event_bus.workspace = true
[target.'cfg(unix)'.dependencies]
cvt = "0.1.1"
@@ -396,14 +396,14 @@ mockito.workspace = true
serial_test = "0.8.0"
sum_tree = { workspace = true, features = ["test-util"] }
virtual-fs.workspace = true
warp_completer = { workspace = true, features = ["test-util"] }
warp_core = { workspace = true, features = ["test-util"] }
warp_editor = { workspace = true, features = ["test-util"] }
warp_server_client = { workspace = true, features = ["test-util"] }
warp_terminal = { workspace = true, features = ["test-util"] }
warpui = { workspace = true, features = ["test-util"] }
warpui_extras = { workspace = true, features = ["test-util"] }
warp_files = { workspace = true, features = ["test-util"] }
galaxy_completer = { workspace = true, features = ["test-util"] }
galaxy_core = { workspace = true, features = ["test-util"] }
galaxy_editor = { workspace = true, features = ["test-util"] }
galaxy_server_client = { workspace = true, features = ["test-util"] }
galaxy_terminal = { workspace = true, features = ["test-util"] }
galaxyui = { workspace = true, features = ["test-util"] }
galaxyui_extras = { workspace = true, features = ["test-util"] }
galaxy_files = { workspace = true, features = ["test-util"] }
repo_metadata = { workspace = true, features = ["test-util"] }
[target.'cfg(not(target_family = "wasm"))'.dev-dependencies]
@@ -417,7 +417,7 @@ prost-build.workspace = true
sha2.workspace = true
tempfile.workspace = true
walkdir = "2.3.2"
warp_util.workspace = true
galaxy_util.workspace = true
[target.'cfg(windows)'.build-dependencies]
embed-resource = "3.0"
@@ -445,7 +445,7 @@ command_predictor = []
context_line_review_comments = []
completions_v2 = [
"plugin_host",
"warp_completer/v2",
"galaxy_completer/v2",
"dep:command-signatures-v2",
]
crash_reporting = [
@@ -453,7 +453,7 @@ crash_reporting = [
"dep:sentry-log",
"dep:minidumper",
"dep:crash-handler",
"warp_logging/crash_reporting",
"galaxy_logging/crash_reporting",
"ai/crash_reporting",
]
creating_shared_sessions = []
@@ -557,7 +557,7 @@ default = [
"ambient_agents_command_line",
"ambient_agents_image_upload",
"scheduled_ambient_agents",
"warp_managed_secrets",
"galaxy_managed_secrets",
"v4a_file_diffs",
"classic_completions",
"force_classic_completions",
@@ -668,8 +668,8 @@ agent_mode_evals = [
"full_source_code_embedding",
"cross_repo_context",
"rust-embed/debug-embed",
"warpui/log_named_telemetry_events",
"warp_logging/agent_mode_evals",
"galaxyui/log_named_telemetry_events",
"galaxy_logging/agent_mode_evals",
]
ambient_agents_command_line = []
ambient_agents_image_upload = []
@@ -710,7 +710,7 @@ local_fs = [
"lsp/local_fs",
"persistence/local_fs",
"repo_metadata/local_fs",
"warp_core/local_fs",
"galaxy_core/local_fs",
]
log_expensive_frames_in_sentry = []
markdown_tables = []
@@ -731,7 +731,7 @@ read_image_files = []
# This feature enables plugin support in Warp. Note that its typically checked
# directly, rather than via the `FeatureFlag` enum, because its value is
# required early in the app lifecycle prior to `FeatureFlag` initialization.
plugin_host = ["dep:rquickjs", "dep:warp_js", "warp_cli/plugin_host"]
plugin_host = ["dep:rquickjs", "dep:galaxy_js", "galaxy_cli/plugin_host"]
# Enable this feature to automatically perform CPU profiling via pprof. The
# generated profile will be written to profile.pb in the current directory.
# NOTE: This may slow down program execution.
@@ -743,7 +743,7 @@ recording_mode = []
# This feature should only be enabled when building a release bundle with
# the bundle script, and can be used to conditionally enable functionality
# accordingly.
release_bundle = ["rust-embed/debug-embed", "warp_core/release_bundle"]
release_bundle = ["rust-embed/debug-embed", "galaxy_core/release_bundle"]
render_agent_mode_output_markdown = []
render_continuous_block_selections_with_single_border = []
rich_history = []
@@ -767,10 +767,10 @@ team_workflows = ["team_features_override"]
toggle_bootstrap_block = []
# Feature enabled only when app is compiled for integration tests.
integration_tests = [
"warp_cli/integration_tests",
"warpui/integration_tests",
"warpui/test-util",
"warp_core/integration_tests",
"galaxy_cli/integration_tests",
"galaxyui/integration_tests",
"galaxyui/test-util",
"galaxy_core/integration_tests",
]
traces = []
viewing_shared_sessions = []
@@ -874,7 +874,7 @@ revert_to_checkpoints = []
rewind_slash_command = []
agent_view = []
agent_view_block_context = ["agent_view"]
warp_managed_secrets = []
galaxy_managed_secrets = []
v4a_file_diffs = []
agent_tips = []
agent_toolbar_editor = ["agent_view"]
+2 -2
View File
@@ -3,11 +3,11 @@
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>dev.warp.WarpDockTilePlugin</string>
<string>com.samsung.GalaxyAIDockTilePlugin</string>
<key>CFBundleExecutable</key>
<string>WarpDockTilePlugin</string>
<key>CFBundleName</key>
<string>WarpDockTilePlugin</string>
<string>GalaxyAIDockTilePlugin</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+6 -6
View File
@@ -10,11 +10,11 @@ use sha2::Digest;
use std::path::{Path, PathBuf};
use std::{env, fs, process::Command};
use walkdir::WalkDir;
use warp_util::assets::{
use galaxy_util::assets::{
ASSETS_DIR, ASYNC_ASSETS_DIR, CONPTY_DLL_FILE, DXCOMPILER_DLL_FILE, DXIL_DLL_FILE,
OPEN_CONSOLE_EXE_FILE, REMOTE_ASSETS_DIR, WINDOWS_ASSETS_DIR,
};
use warp_util::path::app_target_dir;
use galaxy_util::path::app_target_dir;
fn main() -> Result<()> {
cfg_aliases! {
@@ -385,7 +385,7 @@ fn copy_async_assets() {
let mut hasher = sha2::Sha256::new();
hasher.update(&contents);
let hash: [u8; 32] = hasher.finalize().into();
let new_relative_path = warp_util::assets::hashed_asset_path(
let new_relative_path = galaxy_util::assets::hashed_asset_path(
asset_path
.strip_prefix(&asset_dir)
.expect("asset in unexpected location"),
@@ -496,13 +496,13 @@ BEGIN
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "CompanyName", "Denver Technologies, Inc\0"
VALUE "CompanyName", "Samsung Electronics of America, Inc."
VALUE "FileDescription", "{app_name}\0"
VALUE "FileVersion", "{version}\0"
VALUE "LegalCopyright", "© 2025, Denver Technologies, Inc\0"
VALUE "LegalCopyright", "© 2026, Samsung Electronics Co., Ltd.\0"
VALUE "InternalName", "\0"
VALUE "OriginalFilename", "\0"
VALUE "ProductName", "Warp\0"
VALUE "ProductName", "Galaxy AI\0"
VALUE "ProductVersion", "{version}\0"
END
END
+4 -4
View File
@@ -17,9 +17,9 @@ use std::collections::HashSet;
use std::path::PathBuf;
use settings::schema::SettingSchemaEntry;
use warp_core::features::{FeatureFlag, DEBUG_FLAGS, DOGFOOD_FLAGS, PREVIEW_FLAGS, RELEASE_FLAGS};
use warpui_extras::user_preferences::toml_backed::TomlBackedUserPreferences;
use warpui_extras::user_preferences::UserPreferences as _;
use galaxy_core::features::{FeatureFlag, DEBUG_FLAGS, DOGFOOD_FLAGS, PREVIEW_FLAGS, RELEASE_FLAGS};
use galaxyui_extras::user_preferences::toml_backed::TomlBackedUserPreferences;
use galaxyui_extras::user_preferences::UserPreferences as _;
/// Ensures all `inventory::submit!` registrations from the app crate's
/// dependency tree are linked into the binary.
@@ -29,7 +29,7 @@ use warpui_extras::user_preferences::UserPreferences as _;
/// not include most of the app's object files and the `inventory`
/// submissions they contain.
fn ensure_settings_linked() {
let _ = std::hint::black_box(warp::settings::RESTORE_SESSION);
let _ = std::hint::black_box(galaxy::settings::RESTORE_SESSION);
}
fn active_flags_for_channel(channel: &str) -> HashSet<FeatureFlag> {
+1 -1
View File
@@ -7,7 +7,7 @@ use crate::ai::ambient_agents::AmbientAgentTaskId;
use crate::ai::blocklist::agent_view::{AgentViewController, AgentViewControllerEvent};
use crate::ai::blocklist::BlocklistAIHistoryModel;
use crate::terminal::model::session::active_session::ActiveSession;
use warpui::{
use galaxyui::{
AppContext, Entity, EntityId, ModelContext, ModelHandle, SingletonEntity, WeakModelHandle,
WindowId,
};
+1 -1
View File
@@ -1,6 +1,6 @@
use std::str::FromStr;
use warpui::{App, EntityId, WindowId};
use galaxyui::{App, EntityId, WindowId};
use super::*;
+5 -5
View File
@@ -17,9 +17,9 @@ use serde::Serialize;
use std::path::Path;
use std::pin::Pin;
use std::sync::Arc;
use warp_core::channel::ChannelState;
use warp_core::execution_mode::AppExecutionMode;
use warp_core::features::FeatureFlag;
use galaxy_core::channel::ChannelState;
use galaxy_core::execution_mode::AppExecutionMode;
use galaxy_core::features::FeatureFlag;
use crate::ai::agent::conversation::AIConversationId;
use crate::ai::ambient_agents::AmbientAgentTaskId;
@@ -35,8 +35,8 @@ use crate::ai::mcp::TemplatableMCPServerManager;
use crate::settings::AISettings;
use crate::terminal::safe_mode_settings::get_secret_obfuscation_mode;
use crate::workspaces::user_workspaces::UserWorkspaces;
use warp_core::user_preferences::GetUserPreferences;
use warpui::{AppContext, EntityId, SingletonEntity as _};
use galaxy_core::user_preferences::GetUserPreferences;
use galaxyui::{AppContext, EntityId, SingletonEntity as _};
/// Unique, server-generated conversation-scoped token to be roundtripped to the API when sending
/// requests that follow-up within a given conversation.
+1 -1
View File
@@ -42,7 +42,7 @@ use chrono::{DateTime, Local, TimeZone};
use persistence::model::AgentConversationData;
use std::collections::{HashMap, HashSet};
use std::sync::Arc;
use warp_core::command::ExitCode;
use galaxy_core::command::ExitCode;
use warp_multi_agent_api as api;
use warp_multi_agent_api::ask_user_question_result::answer_item::Answer as AskUserQuestionAnswer;
+1 -1
View File
@@ -26,7 +26,7 @@ use ai::agent::convert::ToolToAIAgentActionError;
use ai::agent::UnknownCitationTypeError;
use ai::skills::SkillReference;
use api::ask_user_question::question::QuestionType;
use warp_core::channel::ChannelState;
use galaxy_core::channel::ChannelState;
use warp_multi_agent_api as api;
use crate::ai::agent::{AIAgentAttachment, UserQueryMode};
+1 -1
View File
@@ -3,7 +3,7 @@ use crate::ai::agent::{
AIAgentActionResult, AIAgentActionResultType, TransferShellCommandControlToUserResult,
};
use crate::terminal::model::block::BlockId;
use warp_core::command::ExitCode;
use galaxy_core::command::ExitCode;
use warp_multi_agent_api as api;
#[test]
+70 -2
View File
@@ -2,10 +2,11 @@ use std::{collections::HashMap, sync::Arc};
use crate::{ai::agent::redaction, terminal::model::session::SessionType};
use futures_util::StreamExt;
use warp_core::features::FeatureFlag;
use galaxy_core::features::FeatureFlag;
use warp_multi_agent_api as api;
use crate::ai::bedrock::client::{BedrockClient, BedrockClientConfig};
use crate::ai::bedrock::diagnostic::BedrockDiagnosticLogger;
use crate::server::server_api::ServerApi;
use super::{convert_to::convert_input, ConvertToAPITypeError, RequestParams, ResponseStream};
@@ -141,7 +142,9 @@ pub async fn generate_multi_agent_output(
let is_arn = model_id_for_fallback_check.starts_with("arn:");
let fallback_to_warp = config.fallback_to_warp && !is_arn;
if is_arn && config.fallback_to_warp {
log::info!("[bedrock] Fallback disabled for ARN-based model (not available on Warp server)");
log::info!(
"[bedrock] Fallback disabled for ARN-based model (not available on Warp server)"
);
}
match BedrockClient::from_config(config).await {
Ok(bedrock) => {
@@ -156,6 +159,14 @@ pub async fn generate_multi_agent_output(
log::info!("[bedrock] Starting stream with task_id={task_id}");
let needs_create_task = request
.task_context
.as_ref()
.map(|tc| tc.tasks.is_empty())
.unwrap_or(true);
log::info!("[bedrock] needs_create_task={needs_create_task}");
let model_id = request
.settings
.as_ref()
@@ -165,6 +176,13 @@ pub async fn generate_multi_agent_output(
log::info!("[bedrock] Model: {model_id}");
let diagnostic_logger =
BedrockDiagnosticLogger::try_new(&model_id, "", "", &task_id).map(Arc::new);
if let Some(ref logger) = diagnostic_logger {
logger.log_protobuf_input(&request);
}
let messages =
crate::ai::bedrock::convert_request::extract_messages_from_request(&request);
let system_prompt =
@@ -178,16 +196,66 @@ pub async fn generate_multi_agent_output(
tools.len()
);
for (i, msg) in messages.iter().enumerate() {
let content_desc = match &msg.content {
crate::ai::bedrock::convert::MessageContent::Text(t) => {
format!("Text({}chars)", t.len())
}
crate::ai::bedrock::convert::MessageContent::ToolUse {
tool_use_id,
name,
..
} => {
format!("ToolUse(name={}, id={})", name, tool_use_id)
}
crate::ai::bedrock::convert::MessageContent::ToolResult {
tool_use_id,
is_error,
..
} => {
format!("ToolResult(id={}, is_error={})", tool_use_id, is_error)
}
crate::ai::bedrock::convert::MessageContent::MultiPart(parts) => {
let part_descs: Vec<String> = parts
.iter()
.map(|p| match p {
crate::ai::bedrock::convert::ContentPart::Text(t) => {
format!("Text({})", t.len())
}
crate::ai::bedrock::convert::ContentPart::ToolUse {
name,
tool_use_id,
..
} => format!("ToolUse({},{})", name, tool_use_id),
crate::ai::bedrock::convert::ContentPart::ToolResult {
tool_use_id,
..
} => format!("ToolResult({})", tool_use_id),
})
.collect();
format!("MultiPart[{}]", part_descs.join(", "))
}
};
log::debug!(
"[bedrock] msg[{}]: role={:?}, content={}",
i,
msg.role,
content_desc
);
}
match bedrock
.converse_stream(
&model_id,
&task_id,
needs_create_task,
messages,
system_prompt,
tools,
8192,
None,
true,
diagnostic_logger,
)
.await
{
+1 -1
View File
@@ -1,7 +1,7 @@
use crate::ai::agent::api::RequestParams;
use crate::ai::blocklist::SessionContext;
use crate::ai::llms::LLMId;
use warp_core::features::FeatureFlag;
use galaxy_core::features::FeatureFlag;
use warp_multi_agent_api as api;
use super::get_supported_tools;
+10 -10
View File
@@ -26,17 +26,17 @@ use std::{collections::HashMap, fmt::Display};
use super::task_store::TaskStore;
use uuid::Uuid;
use vec1::{Size0Error, Vec1};
use warp_core::command::ExitCode;
use warp_core::execution_mode::AppExecutionMode;
use warp_core::features::FeatureFlag;
use warp_core::send_telemetry_from_ctx;
use warp_core::ui::appearance::Appearance;
use warp_core::ui::theme::color::internal_colors;
use warp_core::ui::theme::WarpTheme;
use galaxy_core::command::ExitCode;
use galaxy_core::execution_mode::AppExecutionMode;
use galaxy_core::features::FeatureFlag;
use galaxy_core::send_telemetry_from_ctx;
use galaxy_core::ui::appearance::Appearance;
use galaxy_core::ui::theme::color::internal_colors;
use galaxy_core::ui::theme::WarpTheme;
use warp_multi_agent_api::response_event::stream_finished;
use warp_multi_agent_api::{self as api, response_event::stream_finished::TokenUsage};
use warpui::color::ColorU;
use warpui::{EntityId, ModelContext, SingletonEntity};
use galaxyui::color::ColorU;
use galaxyui::{EntityId, ModelContext, SingletonEntity};
use crate::ai::agent::{AIIdentifiers, CancellationReason};
use crate::{
@@ -3683,7 +3683,7 @@ impl std::fmt::Display for ConversationStatus {
}
impl ConversationStatus {
pub fn render_icon(&self, appearance: &Appearance) -> warpui::elements::Icon {
pub fn render_icon(&self, appearance: &Appearance) -> galaxyui::elements::Icon {
match self {
ConversationStatus::InProgress => in_progress_icon(appearance),
ConversationStatus::Success => succeeded_icon(appearance),
+1 -1
View File
@@ -5,7 +5,7 @@ use super::{
};
use crate::ai::artifacts::Artifact;
use crate::persistence::model::AgentConversationData;
use warp_core::features::FeatureFlag;
use galaxy_core::features::FeatureFlag;
use warp_multi_agent_api as api;
fn restored_conversation(conversation_data: Option<AgentConversationData>) -> AIConversation {
+25 -25
View File
@@ -1,90 +1,90 @@
use warp_core::ui::{appearance::Appearance, theme::AnsiColorIdentifier};
use galaxy_core::ui::{appearance::Appearance, theme::AnsiColorIdentifier};
use crate::ui_components::{blended_colors, icons::Icon};
pub fn todo_list_icon(appearance: &Appearance) -> warpui::elements::Icon {
warpui::elements::Icon::new(
pub fn todo_list_icon(appearance: &Appearance) -> galaxyui::elements::Icon {
galaxyui::elements::Icon::new(
Icon::BulletedListBlock.into(),
blended_colors::neutral_7(appearance.theme()),
)
}
pub fn pending_icon(appearance: &Appearance) -> warpui::elements::Icon {
warpui::elements::Icon::new(
pub fn pending_icon(appearance: &Appearance) -> galaxyui::elements::Icon {
galaxyui::elements::Icon::new(
Icon::Queued.into(),
blended_colors::neutral_5(appearance.theme()),
)
}
pub fn in_progress_icon(appearance: &Appearance) -> warpui::elements::Icon {
warpui::elements::Icon::new(
pub fn in_progress_icon(appearance: &Appearance) -> galaxyui::elements::Icon {
galaxyui::elements::Icon::new(
Icon::Circle.into(),
AnsiColorIdentifier::Magenta.to_ansi_color(&appearance.theme().terminal_colors().normal),
)
}
pub fn succeeded_icon(appearance: &Appearance) -> warpui::elements::Icon {
warpui::elements::Icon::new(
pub fn succeeded_icon(appearance: &Appearance) -> galaxyui::elements::Icon {
galaxyui::elements::Icon::new(
Icon::Check.into(),
AnsiColorIdentifier::Green.to_ansi_color(&appearance.theme().terminal_colors().normal),
)
}
pub fn addressed_comment_icon(appearance: &Appearance) -> warpui::elements::Icon {
warpui::elements::Icon::new(
pub fn addressed_comment_icon(appearance: &Appearance) -> galaxyui::elements::Icon {
galaxyui::elements::Icon::new(
Icon::AddressedComment.into(),
AnsiColorIdentifier::Green.to_ansi_color(&appearance.theme().terminal_colors().normal),
)
}
pub fn failed_icon(appearance: &Appearance) -> warpui::elements::Icon {
warpui::elements::Icon::new(
pub fn failed_icon(appearance: &Appearance) -> galaxyui::elements::Icon {
galaxyui::elements::Icon::new(
Icon::Triangle.into(),
AnsiColorIdentifier::Red.to_ansi_color(&appearance.theme().terminal_colors().normal),
)
}
/// Not running, does not need user's attention
pub fn gray_stop_icon(appearance: &Appearance) -> warpui::elements::Icon {
warpui::elements::Icon::new(
pub fn gray_stop_icon(appearance: &Appearance) -> galaxyui::elements::Icon {
galaxyui::elements::Icon::new(
Icon::StopFilled.into(),
blended_colors::neutral_5(appearance.theme()),
)
}
/// Agent is waiting for user to follow-up with next prompt.
pub fn gray_clock_icon(appearance: &Appearance) -> warpui::elements::Icon {
warpui::elements::Icon::new(
pub fn gray_clock_icon(appearance: &Appearance) -> galaxyui::elements::Icon {
galaxyui::elements::Icon::new(
Icon::ClockSnooze.into(),
blended_colors::neutral_5(appearance.theme()),
)
}
/// Loading but not actionable yet.
pub fn gray_circle_icon(appearance: &Appearance) -> warpui::elements::Icon {
warpui::elements::Icon::new(
pub fn gray_circle_icon(appearance: &Appearance) -> galaxyui::elements::Icon {
galaxyui::elements::Icon::new(
Icon::Circle.into(),
blended_colors::neutral_5(appearance.theme()),
)
}
/// Not running, requires user's attention
pub fn yellow_stop_icon(appearance: &Appearance) -> warpui::elements::Icon {
warpui::elements::Icon::new(
pub fn yellow_stop_icon(appearance: &Appearance) -> galaxyui::elements::Icon {
galaxyui::elements::Icon::new(
Icon::StopFilled.into(),
AnsiColorIdentifier::Yellow.to_ansi_color(&appearance.theme().terminal_colors().normal),
)
}
/// To be used for actions (like running commands/reading files) that are long-running and executing.
pub fn yellow_running_icon(appearance: &Appearance) -> warpui::elements::Icon {
warpui::elements::Icon::new(
pub fn yellow_running_icon(appearance: &Appearance) -> galaxyui::elements::Icon {
galaxyui::elements::Icon::new(
Icon::Circle.into(),
AnsiColorIdentifier::Yellow.to_ansi_color(&appearance.theme().terminal_colors().normal),
)
}
/// Used for buttons that stop the current task
pub fn red_stop_icon(appearance: &Appearance) -> warpui::elements::Icon {
warpui::elements::Icon::new(Icon::StopFilled.into(), appearance.theme().ansi_fg_red())
pub fn red_stop_icon(appearance: &Appearance) -> galaxyui::elements::Icon {
galaxyui::elements::Icon::new(Icon::StopFilled.into(), appearance.theme().ansi_fg_red())
}
+2 -2
View File
@@ -14,7 +14,7 @@ pub(super) mod util;
// Re-export types that were moved to the ai crate.
pub use ai::agent::{action::*, action_result::*, AIAgentCitation, FileLocations};
use warp_core::features::FeatureFlag;
use galaxy_core::features::FeatureFlag;
#[cfg(test)]
mod suggestion_test;
@@ -33,7 +33,7 @@ use comment::ReviewComment;
use task::TaskId;
pub use telemetry::AIIdentifiers;
use warp_editor::render::model::LineCount;
use galaxy_editor::render::model::LineCount;
use parking_lot::RwLock;
use std::collections::{HashMap, HashSet};
+1 -1
View File
@@ -1,5 +1,5 @@
use serde::Serialize;
use warpui::{AppContext, SingletonEntity};
use galaxyui::{AppContext, SingletonEntity};
use crate::ai::llms::LLMId;
use crate::CloudModel;
+12 -12
View File
@@ -1,15 +1,15 @@
use crate::ai::blocklist::{BlocklistAIContextEvent, BlocklistAIContextModel};
use pathfinder_color::ColorU;
use warp_core::ui::appearance::Appearance;
use warp_core::ui::theme::Fill;
use warpui::elements::{
use galaxy_core::ui::appearance::Appearance;
use galaxy_core::ui::theme::Fill;
use galaxyui::elements::{
ClippedScrollStateHandle, ClippedScrollable, Dismiss, Empty, Expanded, ParentElement,
SavePosition, ScrollTarget, ScrollToPositionMode, ScrollbarWidth, Shrinkable,
};
use warpui::fonts::FamilyId;
use warpui::ModelHandle;
use warpui::SingletonEntity;
use warpui::{
use galaxyui::fonts::FamilyId;
use galaxyui::ModelHandle;
use galaxyui::SingletonEntity;
use galaxyui::{
elements::{
Border, ConstrainedBox, Container, CornerRadius, CrossAxisAlignment, DropShadow, Flex,
MainAxisSize, Radius, Text,
@@ -50,7 +50,7 @@ struct Styles {
}
pub fn init(app: &mut AppContext) {
use warpui::keymap::macros::*;
use galaxyui::keymap::macros::*;
app.register_fixed_bindings([FixedBinding::new(
"escape",
@@ -124,9 +124,9 @@ impl AgentTodosPopupView {
fn render_header(
&self,
app: &warpui::AppContext,
app: &galaxyui::AppContext,
todo_list: &AIAgentTodoList,
) -> Box<dyn warpui::Element> {
) -> Box<dyn galaxyui::Element> {
let appearance = Appearance::as_ref(app);
let styles = self.styles(appearance);
let theme = appearance.theme();
@@ -159,7 +159,7 @@ impl View for AgentTodosPopupView {
"AgentTodosPopup"
}
fn render(&self, app: &warpui::AppContext) -> Box<dyn warpui::Element> {
fn render(&self, app: &galaxyui::AppContext) -> Box<dyn galaxyui::Element> {
let Some(todo_list) = self
.ai_context_model
.as_ref(app)
@@ -271,7 +271,7 @@ impl View for AgentTodosPopupView {
ScrollbarWidth::Auto,
theme.nonactive_ui_detail().into(),
theme.active_ui_detail().into(),
warpui::elements::Fill::None,
galaxyui::elements::Fill::None,
)
.with_overlayed_scrollbar()
.finish();
+2 -2
View File
@@ -13,7 +13,7 @@ use markdown_parser::{
use mermaid_to_svg::is_mermaid_diagram;
use regex::Regex;
use std::{collections::HashMap, path::PathBuf};
use warp_util::path::LineAndColumnArg;
use galaxy_util::path::LineAndColumnArg;
lazy_static! {
/// Markdown prefix for code blocks. Matches on triple backticks followed by a language.
@@ -258,7 +258,7 @@ fn image_section(image: FormattedImage, layout: AgentOutputImageLayout) -> AIAge
}
fn markdown_source_for_image(image: &FormattedImage) -> String {
warp_editor::content::text::format_image_markdown(
galaxy_editor::content::text::format_image_markdown(
&image.alt_text,
&image.source,
image.title.as_deref(),
+9 -9
View File
@@ -29,15 +29,15 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer};
use session_sharing_protocol::common::SessionId;
use std::collections::{HashMap, HashSet};
use std::time::Duration;
use warp_cli::agent::Harness;
use warp_core::execution_mode::AppExecutionMode;
use warp_core::features::FeatureFlag;
use warp_core::report_error;
use warp_core::ui::theme::{color::internal_colors, WarpTheme};
use warpui::color::ColorU;
use warpui::r#async::Timer;
use warpui::windowing::{StateEvent, WindowManager};
use warpui::{
use galaxy_cli::agent::Harness;
use galaxy_core::execution_mode::AppExecutionMode;
use galaxy_core::features::FeatureFlag;
use galaxy_core::report_error;
use galaxy_core::ui::theme::{color::internal_colors, WarpTheme};
use galaxyui::color::ColorU;
use galaxyui::r#async::Timer;
use galaxyui::windowing::{StateEvent, WindowManager};
use galaxyui::{
duration_with_jitter, AppContext, Entity, EntityId, ModelContext, RequestState,
SingletonEntity, WindowId,
};
@@ -8,8 +8,8 @@ use std::{
Arc,
},
};
use warp_core::features::FeatureFlag;
use warpui::{App, EntityId};
use galaxy_core::features::FeatureFlag;
use galaxyui::{App, EntityId};
use crate::ai::agent::conversation::{AIConversation, AIConversationId, ConversationStatus};
use crate::ai::ambient_agents::task::{TaskCreatorInfo, TaskStatusMessage};
@@ -29,7 +29,7 @@ use super::{
MAX_PERSONAL_TASKS, MAX_TEAM_TASKS,
};
use crate::ai::ambient_agents::task::HarnessConfig;
use warp_cli::agent::Harness;
use galaxy_cli::agent::Harness;
/// Creates a test task with specified creator UID and updated_at time
fn create_test_task(
+1 -1
View File
@@ -6,7 +6,7 @@ use async_trait::async_trait;
use futures::future::Either;
use futures::StreamExt;
use instant::Instant;
use warpui::r#async::Timer;
use galaxyui::r#async::Timer;
use crate::server::server_api::ai::AgentRunEvent;
use crate::server::server_api::ServerApi;
+1 -1
View File
@@ -5,7 +5,7 @@ use anyhow::{anyhow, Context, Result};
#[cfg(not(target_family = "wasm"))]
use futures::future::Either;
#[cfg(not(target_family = "wasm"))]
use warpui::r#async::Timer;
use galaxyui::r#async::Timer;
use crate::ai::agent::ReceivedMessageInput;
use crate::server::server_api::ai::{AIClient, AgentRunEvent, ReadAgentMessageResponse};
@@ -1,7 +1,7 @@
use std::collections::HashMap;
use warp_core::features::FeatureFlag;
use warpui::{AppContext, Entity, EntityId, ModelContext, SingletonEntity, WindowId};
use galaxy_core::features::FeatureFlag;
use galaxyui::{AppContext, Entity, EntityId, ModelContext, SingletonEntity, WindowId};
use crate::settings::AISettings;
@@ -21,7 +21,7 @@ use crate::terminal::CLIAgent;
use crate::workspace::util::is_terminal_view_in_same_tab;
use crate::workspace::{Workspace, WorkspaceRegistry};
use crate::BlocklistAIHistoryModel;
use warp_core::send_telemetry_from_ctx;
use galaxy_core::send_telemetry_from_ctx;
/// Singleton model responsible for triggering in-app notifications on blocking conversation
/// status updates and tracking/storing these notifications for the notifications mailbox.
@@ -1,5 +1,5 @@
use warp_core::features::FeatureFlag;
use warpui::{App, EntityId, ModelHandle};
use galaxy_core::features::FeatureFlag;
use galaxyui::{App, EntityId, ModelHandle};
use crate::ai::active_agent_views_model::ActiveAgentViewsModel;
use crate::ai::agent::conversation::AIConversationId;
@@ -7,18 +7,18 @@ use crate::appearance::Appearance;
use crate::ui_components::icons::Icon;
use pathfinder_color::ColorU;
use pathfinder_geometry::vector::vec2f;
use warp_core::ui::color::blend::Blend;
use warp_core::ui::theme::color::internal_colors;
use warpui::elements::{
use galaxy_core::ui::color::blend::Blend;
use galaxy_core::ui::theme::color::internal_colors;
use galaxyui::elements::{
Align, Border, ConstrainedBox, Container, CornerRadius, CrossAxisAlignment, Dismiss,
DropShadow, Element, Flex, Hoverable, MainAxisAlignment, MainAxisSize, MouseStateHandle,
ParentElement, Radius, Shrinkable, Text,
};
use warpui::fonts::{Properties, Weight};
use warpui::keymap::{FixedBinding, Keystroke};
use warpui::platform::Cursor;
use warpui::ui_components::components::{Coords, UiComponent, UiComponentStyles};
use warpui::{AppContext, Entity, SingletonEntity, TypedActionView, View, ViewContext};
use galaxyui::fonts::{Properties, Weight};
use galaxyui::keymap::{FixedBinding, Keystroke};
use galaxyui::platform::Cursor;
use galaxyui::ui_components::components::{Coords, UiComponent, UiComponentStyles};
use galaxyui::{AppContext, Entity, SingletonEntity, TypedActionView, View, ViewContext};
// Modal dimensions based on Figma design.
const MODAL_WIDTH: f32 = 440.;
@@ -79,7 +79,7 @@ pub struct AgentTypeSelector {
}
pub fn init(app: &mut AppContext) {
use warpui::keymap::macros::*;
use galaxyui::keymap::macros::*;
app.register_fixed_bindings(vec![
FixedBinding::new(
@@ -223,7 +223,7 @@ impl AgentTypeSelector {
(base_background, base_border)
};
let avatar_icon = ConstrainedBox::new(icon.to_warpui_icon(icon_color).finish())
let avatar_icon = ConstrainedBox::new(icon.to_galaxyui_icon(icon_color).finish())
.with_width(AVATAR_ICON_SIZE)
.with_height(AVATAR_ICON_SIZE)
.finish();
@@ -11,23 +11,23 @@ use crate::workflows::WorkflowType;
use serde::Serialize;
use std::collections::HashMap;
use string_offset::CharCounter;
use warp_completer::signatures::CommandRegistry;
use warp_completer::{util::parse_current_commands_and_tokens, ParsedTokensSnapshot};
use warp_core::report_error;
use warp_core::ui::theme::{AnsiColorIdentifier, AnsiColors};
use warpui::clipboard::ClipboardContent;
use warpui::elements::{
use galaxy_completer::signatures::CommandRegistry;
use galaxy_completer::{util::parse_current_commands_and_tokens, ParsedTokensSnapshot};
use galaxy_core::report_error;
use galaxy_core::ui::theme::{AnsiColorIdentifier, AnsiColors};
use galaxyui::clipboard::ClipboardContent;
use galaxyui::elements::{
new_scrollable::{ClippedAxisConfiguration, DualAxisConfig, NewScrollable},
Align, Border, ClippedScrollStateHandle, ConstrainedBox, Container, CornerRadius,
CrossAxisAlignment, Element, Empty, Expanded, Flex, Highlight, HighlightedRange,
MainAxisAlignment, MainAxisSize, MouseStateHandle, ParentElement, Radius, Text,
};
use warpui::fonts::{Properties, Weight};
use warpui::prelude::ChildView;
use warpui::text_layout::TextStyle;
use warpui::ui_components::components::{UiComponent, UiComponentStyles};
use warpui::ViewHandle;
use warpui::{AppContext, Entity, SingletonEntity, TypedActionView, View, ViewContext};
use galaxyui::fonts::{Properties, Weight};
use galaxyui::prelude::ChildView;
use galaxyui::text_layout::TextStyle;
use galaxyui::ui_components::components::{UiComponent, UiComponentStyles};
use galaxyui::ViewHandle;
use galaxyui::{AppContext, Entity, SingletonEntity, TypedActionView, View, ViewContext};
const DOCS_URL: &str = "https://docs.warp.dev/agent-platform/cloud-agents/overview";
const ENV_DOCS_URL: &str =
@@ -617,7 +617,7 @@ impl View for CloudSetupGuideView {
},
theme.nonactive_ui_detail().into(),
theme.active_ui_detail().into(),
warpui::elements::Fill::None,
galaxyui::elements::Fill::None,
)
.finish();
@@ -1,8 +1,8 @@
//! Action buttons row for conversation details panel.
use warp_core::ui::theme::AnsiColorIdentifier;
use warpui::elements::{ChildView, CrossAxisAlignment, Empty, Flex, ParentElement};
use warpui::{AppContext, Element, Entity, TypedActionView, View, ViewContext, ViewHandle};
use galaxy_core::ui::theme::AnsiColorIdentifier;
use galaxyui::elements::{ChildView, CrossAxisAlignment, Empty, Flex, ParentElement};
use galaxyui::{AppContext, Element, Entity, TypedActionView, View, ViewContext, ViewHandle};
use crate::view_components::copyable_text_field::COPY_FEEDBACK_DURATION;
@@ -274,7 +274,7 @@ impl TypedActionView for ConversationActionButtonsRow {
let duration = COPY_FEEDBACK_DURATION;
ctx.spawn(
async move {
warpui::r#async::Timer::after(duration).await;
galaxyui::r#async::Timer::after(duration).await;
},
|me, _, ctx| {
me.copy_link_button.update(ctx, |button, ctx| {
+1 -1
View File
@@ -9,7 +9,7 @@ pub(crate) mod view;
pub(crate) use agent_management_model::{AgentManagementEvent, AgentNotificationsModel};
pub fn init(app: &mut warpui::AppContext) {
pub fn init(app: &mut galaxyui::AppContext) {
view::init(app);
agent_type_selector::init(app);
notifications::view::NotificationMailboxView::init(app);
@@ -1,7 +1,7 @@
use enum_iterator::Sequence;
use instant::Instant;
use uuid::Uuid;
use warpui::EntityId;
use galaxyui::EntityId;
use crate::ai::agent::conversation::AIConversationId;
use crate::ai::artifacts::Artifact;
@@ -1,20 +1,20 @@
use std::sync::Arc;
use pathfinder_color::ColorU;
use warp_core::ui::icons::Icon;
use warp_core::ui::theme::{Fill, WarpTheme};
use warpui::clipboard::ClipboardContent;
use warpui::elements::{
use galaxy_core::ui::icons::Icon;
use galaxy_core::ui::theme::{Fill, WarpTheme};
use galaxyui::clipboard::ClipboardContent;
use galaxyui::elements::{
ChildView, ConstrainedBox, Container, CornerRadius, CrossAxisAlignment, DispatchEventResult,
Element, EventHandler, Flex, MainAxisAlignment, MainAxisSize, ParentElement, Radius, Rect,
Shrinkable,
};
use warpui::fonts::Weight;
use warpui::ui_components::components::{UiComponent, UiComponentStyles};
use warpui::{View, ViewContext, ViewHandle};
use galaxyui::fonts::Weight;
use galaxyui::ui_components::components::{UiComponent, UiComponentStyles};
use galaxyui::{View, ViewContext, ViewHandle};
use warp_core::ui::appearance::Appearance as CoreAppearance;
use warp_core::ui::theme::color::internal_colors;
use galaxy_core::ui::appearance::Appearance as CoreAppearance;
use galaxy_core::ui::theme::color::internal_colors;
use crate::ai::agent::conversation::ConversationStatus;
use crate::ai::agent_management::notifications::item::NotificationSourceAgent;
@@ -85,7 +85,7 @@ impl ActionButtonTheme for NotificationArtifactButtonTheme {
}
/// Callback invoked when the user clicks the expand/collapse affordance on a clamped message.
pub(crate) type OnExpandClick = Box<dyn Fn(&mut warpui::EventContext)>;
pub(crate) type OnExpandClick = Box<dyn Fn(&mut galaxyui::EventContext)>;
/// Renders the inner content of a notification item.
/// Dispatches to the rich layout (with branch row) or simple layout based on `item.branch`.
@@ -258,7 +258,7 @@ fn render_branch_label(branch: &str, appearance: &Appearance) -> Box<dyn Element
.with_cross_axis_alignment(CrossAxisAlignment::Center)
.with_spacing(2.)
.with_child(
ConstrainedBox::new(Icon::GitBranch.to_warpui_icon(color).finish())
ConstrainedBox::new(Icon::GitBranch.to_galaxyui_icon(color).finish())
.with_width(10.)
.with_height(10.)
.finish(),
@@ -339,7 +339,7 @@ fn render_expand_chevron(
Icon::ChevronRight
};
let chevron = ConstrainedBox::new(
icon.to_warpui_icon(theme.disabled_text_color(theme.surface_1()))
icon.to_galaxyui_icon(theme.disabled_text_color(theme.surface_1()))
.finish(),
)
.with_width(12.)
@@ -1,4 +1,4 @@
use warpui::EntityId;
use galaxyui::EntityId;
use super::*;
use crate::ai::agent::conversation::AIConversationId;
@@ -1,20 +1,20 @@
use std::time::Duration;
use pathfinder_geometry::vector::vec2f;
use warp_core::ui::color::blend::Blend;
use warp_core::ui::theme::color::internal_colors;
use warpui::elements::{
use galaxy_core::ui::color::blend::Blend;
use galaxy_core::ui::theme::color::internal_colors;
use galaxyui::elements::{
Border, ChildAnchor, ConstrainedBox, Container, CornerRadius, CrossAxisAlignment,
DispatchEventResult, Element, EventHandler, Flex, Hoverable, MouseStateHandle,
OffsetPositioning, Padding, ParentElement, PositionedElementAnchor,
PositionedElementOffsetBounds, Radius, SavePosition, Shrinkable, Stack,
};
use warpui::keymap::Keystroke;
use warpui::platform::Cursor;
use warpui::r#async::{SpawnedFutureHandle, Timer};
use warpui::ui_components::components::{Coords, UiComponent, UiComponentStyles};
use warpui::ui_components::keyboard_shortcut::KeyboardShortcut;
use warpui::{AppContext, Entity, SingletonEntity, TypedActionView, View, ViewContext, ViewHandle};
use galaxyui::keymap::Keystroke;
use galaxyui::platform::Cursor;
use galaxyui::r#async::{SpawnedFutureHandle, Timer};
use galaxyui::ui_components::components::{Coords, UiComponent, UiComponentStyles};
use galaxyui::ui_components::keyboard_shortcut::KeyboardShortcut;
use galaxyui::{AppContext, Entity, SingletonEntity, TypedActionView, View, ViewContext, ViewHandle};
use crate::ai::agent_management::notifications::item_rendering::{
create_notification_artifact_buttons_view, handle_notification_artifact_buttons_event,
@@ -367,7 +367,7 @@ fn render_toast(
appearance: &Appearance,
) -> Box<dyn Element> {
let theme = appearance.theme();
let on_expand: OnExpandClick = Box::new(move |ctx: &mut warpui::EventContext| {
let on_expand: OnExpandClick = Box::new(move |ctx: &mut galaxyui::EventContext| {
ctx.dispatch_typed_action(AgentNotificationToastAction::ToggleMessageExpanded(id));
});
let keybinding_hint = keystroke.map(|ks| render_keybinding_hint(ks, appearance));
@@ -1,18 +1,18 @@
use warp_core::ui::theme::color::internal_colors;
use warpui::elements::new_scrollable::{ScrollableAppearance, SingleAxisConfig};
use warpui::elements::{
use galaxy_core::ui::theme::color::internal_colors;
use galaxyui::elements::new_scrollable::{ScrollableAppearance, SingleAxisConfig};
use galaxyui::elements::{
Border, ChildView, ClippedScrollStateHandle, ConstrainedBox, Container, CornerRadius,
CrossAxisAlignment, Dismiss, DispatchEventResult, Element, Empty, EventHandler,
Fill as ElementFill, Flex, Hoverable, MainAxisAlignment, MainAxisSize, MouseStateHandle,
NewScrollable, Padding, ParentElement, Radius, SavePosition, ScrollTarget,
ScrollToPositionMode, ScrollbarWidth, Shrinkable,
};
use warpui::fonts::Weight;
use warpui::keymap::macros::id;
use warpui::keymap::FixedBinding;
use warpui::platform::Cursor;
use warpui::ui_components::components::{UiComponent, UiComponentStyles};
use warpui::{AppContext, Entity, SingletonEntity, TypedActionView, View, ViewContext, ViewHandle};
use galaxyui::fonts::Weight;
use galaxyui::keymap::macros::id;
use galaxyui::keymap::FixedBinding;
use galaxyui::platform::Cursor;
use galaxyui::ui_components::components::{UiComponent, UiComponentStyles};
use galaxyui::{AppContext, Entity, SingletonEntity, TypedActionView, View, ViewContext, ViewHandle};
use crate::ai::agent_management::notifications::item::NotificationFilter;
use crate::ai::agent_management::notifications::item_rendering::{
@@ -56,7 +56,7 @@ impl Entity for NotificationMailboxView {
#[derive(Debug, Clone)]
pub enum NotificationMailboxViewEvent {
NavigateToTerminal { terminal_view_id: warpui::EntityId },
NavigateToTerminal { terminal_view_id: galaxyui::EntityId },
Dismissed,
}
+3 -3
View File
@@ -1,7 +1,7 @@
use serde::Serialize;
use serde_json::json;
use strum_macros::{EnumDiscriminants, EnumIter};
use warp_core::telemetry::{EnablementState, TelemetryEvent, TelemetryEventDesc};
use galaxy_core::telemetry::{EnablementState, TelemetryEvent, TelemetryEventDesc};
use crate::ai::agent_management::cloud_setup_guide_view::SetupGuideDocs;
@@ -216,7 +216,7 @@ impl TelemetryEvent for AgentManagementTelemetryEvent {
}
fn event_descs() -> impl Iterator<Item = Box<dyn TelemetryEventDesc>> {
warp_core::telemetry::enum_events::<Self>()
galaxy_core::telemetry::enum_events::<Self>()
}
}
@@ -290,4 +290,4 @@ impl TelemetryEventDesc for AgentManagementTelemetryEventDiscriminants {
}
}
warp_core::register_telemetry_event!(AgentManagementTelemetryEvent);
galaxy_core::register_telemetry_event!(AgentManagementTelemetryEvent);
+20 -20
View File
@@ -6,9 +6,9 @@ use fuzzy_match::match_indices_case_insensitive;
use lazy_static::lazy_static;
use pathfinder_color::ColorU;
use siphasher::sip::SipHasher;
use warp_core::features::FeatureFlag;
use warpui::scene::DropShadow;
use warpui::ui_components::button::ButtonVariant;
use galaxy_core::features::FeatureFlag;
use galaxyui::scene::DropShadow;
use galaxyui::ui_components::button::ButtonVariant;
use crate::ai::agent::conversation::AIConversationId;
use crate::ai::agent_conversations_model::{
@@ -65,26 +65,26 @@ use crate::workspaces::user_workspaces::UserWorkspaces;
use crate::{send_telemetry_from_ctx, AgentModeEntrypoint};
use pathfinder_geometry::vector::vec2f;
use settings::Setting;
use warp_cli::agent::Harness;
use warp_core::ui::icons::Icon;
use warp_core::ui::theme::color::internal_colors;
use warp_core::ui::theme::Fill;
use warpui::clipboard::ClipboardContent;
use warpui::elements::new_scrollable::{
use galaxy_cli::agent::Harness;
use galaxy_core::ui::icons::Icon;
use galaxy_core::ui::theme::color::internal_colors;
use galaxy_core::ui::theme::Fill;
use galaxyui::clipboard::ClipboardContent;
use galaxyui::elements::new_scrollable::{
NewScrollableElement, ScrollableAppearance, SingleAxisConfig,
};
use warpui::elements::{
use galaxyui::elements::{
Align, Border, ChildAnchor, ChildView, Clipped, ConstrainedBox, Container, CornerRadius,
CrossAxisAlignment, Element, Empty, Expanded, Flex, Hoverable, List, ListState, MainAxisSize,
MouseStateHandle, NewScrollable, OffsetPositioning, Padding, ParentAnchor, ParentElement,
ParentOffsetBounds, Radius, Rect, ScrollStateHandle, ScrollbarWidth, Shrinkable,
SizeConstraintCondition, SizeConstraintSwitch, Stack, Text, Wrap,
};
use warpui::fonts::{Properties, Weight};
use warpui::platform::Cursor;
use warpui::ui_components::components::UiComponent;
use warpui::ui_components::components::UiComponentStyles;
use warpui::{
use galaxyui::fonts::{Properties, Weight};
use galaxyui::platform::Cursor;
use galaxyui::ui_components::components::UiComponent;
use galaxyui::ui_components::components::UiComponentStyles;
use galaxyui::{
keymap::FixedBinding, Action, AppContext, Entity, FocusContext, ModelHandle, SingletonEntity,
TypedActionView, View, ViewContext, ViewHandle, WeakViewHandle,
};
@@ -117,7 +117,7 @@ pub fn init(app: &mut AppContext) {
app.register_fixed_bindings([FixedBinding::new(
cmd_or_ctrl_shift("f"),
AgentManagementViewAction::FocusSearch,
warpui::keymap::macros::id!(AgentManagementView::ui_name()),
galaxyui::keymap::macros::id!(AgentManagementView::ui_name()),
)]);
}
@@ -1992,7 +1992,7 @@ impl AgentManagementView {
let loading_icon = ConstrainedBox::new(
Icon::Refresh
.to_warpui_icon(theme.sub_text_color(theme.surface_1()))
.to_galaxyui_icon(theme.sub_text_color(theme.surface_1()))
.finish(),
)
.with_height(icon_size)
@@ -2036,7 +2036,7 @@ impl AgentManagementView {
let loading_icon = ConstrainedBox::new(
Icon::Loading
.to_warpui_icon(Fill::Solid(internal_colors::neutral_6(theme)))
.to_galaxyui_icon(Fill::Solid(internal_colors::neutral_6(theme)))
.finish(),
)
.with_height(appearance.ui_font_size() + 2.)
@@ -2096,7 +2096,7 @@ impl AgentManagementView {
let appearance = Appearance::as_ref(app);
let icon = ConstrainedBox::new(
Icon::FilterOff
.to_warpui_icon(appearance.theme().nonactive_ui_text_color())
.to_galaxyui_icon(appearance.theme().nonactive_ui_text_color())
.finish(),
)
.with_width(24.)
@@ -2135,7 +2135,7 @@ impl AgentManagementView {
axis_config,
theme.nonactive_ui_detail().into(),
theme.active_ui_detail().into(),
warpui::elements::Fill::None,
galaxyui::elements::Fill::None,
)
.with_vertical_scrollbar(ScrollableAppearance::new(ScrollbarWidth::None, false))
.with_always_handle_events_first(false)
+3 -3
View File
@@ -2,8 +2,8 @@
use anyhow::{Context, Result};
use serde::Serialize;
use warp_cli::agent::OutputFormat;
use warpui::{platform::TerminationMode, AppContext, SingletonEntity};
use galaxy_cli::agent::OutputFormat;
use galaxyui::{platform::TerminationMode, AppContext, SingletonEntity};
use crate::auth::auth_manager::{AuthManager, AuthManagerEvent};
use crate::auth::user::PrincipalType;
@@ -116,7 +116,7 @@ struct WhoamiOutput {
/// Singleton model that provides a `ModelContext` for the `whoami` command's async work.
struct WhoamiRunner;
impl warpui::Entity for WhoamiRunner {
impl galaxyui::Entity for WhoamiRunner {
type Event = ();
}
+5 -5
View File
@@ -4,10 +4,10 @@ use crate::ai::agent_sdk::oauth_flow::poll_oauth_until_terminal;
use crate::ai::cloud_environments::GithubRepo;
use crate::server::server_api::ai::AgentListItem;
use crate::server::server_api::ServerApiProvider;
use warp_cli::agent::ListAgentConfigsArgs;
use warp_graphql::queries::get_oauth_connect_tx_status::OauthConnectTxStatus;
use warp_graphql::queries::user_repo_auth_status::UserRepoAuthStatusEnum;
use warpui::{platform::TerminationMode, AppContext, ModelContext, SingletonEntity};
use galaxy_cli::agent::ListAgentConfigsArgs;
use galaxy_graphql::queries::get_oauth_connect_tx_status::OauthConnectTxStatus;
use galaxy_graphql::queries::user_repo_auth_status::UserRepoAuthStatusEnum;
use galaxyui::{platform::TerminationMode, AppContext, ModelContext, SingletonEntity};
const MAX_LINE_WIDTH: usize = 90;
const MAX_AUTH_ATTEMPTS: u32 = 8;
@@ -304,7 +304,7 @@ impl AgentConfigRunner {
}
}
impl warpui::Entity for AgentConfigRunner {
impl galaxyui::Entity for AgentConfigRunner {
type Event = ();
}
+6 -6
View File
@@ -27,7 +27,7 @@ use comfy_table::Cell;
use futures::{future, StreamExt};
use serde::Serialize;
use warp_cli::{
use galaxy_cli::{
agent::{Harness, OutputFormat, Prompt, RunCloudArgs},
json_filter::JsonOutput,
task::{
@@ -37,10 +37,10 @@ use warp_cli::{
},
GlobalOptions,
};
use warp_core::channel::ChannelState;
use warp_core::features::FeatureFlag;
use warpui::r#async::Timer;
use warpui::{
use galaxy_core::channel::ChannelState;
use galaxy_core::features::FeatureFlag;
use galaxyui::r#async::Timer;
use galaxyui::{
platform::TerminationMode, r#async::Spawnable, AppContext, ModelContext, SingletonEntity,
};
@@ -1240,7 +1240,7 @@ impl AmbientAgentRunner {
}
}
impl warpui::Entity for AmbientAgentRunner {
impl galaxyui::Entity for AmbientAgentRunner {
type Event = ();
}
+2 -2
View File
@@ -3,8 +3,8 @@
use chrono::{TimeZone, Utc};
use warp_cli::json_filter::JsonOutput;
use warp_cli::task::{
use galaxy_cli::json_filter::JsonOutput;
use galaxy_cli::task::{
ArtifactTypeArg, ExecutionLocationArg, ListTasksArgs, RunSortByArg, RunSortOrderArg,
RunSourceArg, RunStateArg,
};
+5 -5
View File
@@ -2,12 +2,12 @@ use std::{path::PathBuf, sync::Arc};
use anyhow::{Context, Result};
use serde::Serialize;
use warp_cli::agent::OutputFormat;
use warp_cli::artifact::{
use galaxy_cli::agent::OutputFormat;
use galaxy_cli::artifact::{
ArtifactCommand, DownloadArtifactArgs, GetArtifactArgs, UploadArtifactArgs,
};
use warp_cli::GlobalOptions;
use warpui::{platform::TerminationMode, AppContext, ModelContext, SingletonEntity};
use galaxy_cli::GlobalOptions;
use galaxyui::{platform::TerminationMode, AppContext, ModelContext, SingletonEntity};
use crate::ai::artifact_download::{download_artifact_bytes, download_destination};
#[cfg(test)]
@@ -129,7 +129,7 @@ impl ArtifactCommandRunner {
}
}
impl warpui::Entity for ArtifactCommandRunner {
impl galaxyui::Entity for ArtifactCommandRunner {
type Event = ();
}
+1 -1
View File
@@ -1,5 +1,5 @@
use std::path::PathBuf;
use warp_cli::agent::OutputFormat;
use galaxy_cli::agent::OutputFormat;
use super::*;
+1 -1
View File
@@ -7,7 +7,7 @@ use std::sync::Arc;
use anyhow::{anyhow, bail, Context, Result};
use blocking::unblock;
use mime_guess::from_path;
use warp_cli::artifact::UploadArtifactArgs;
use galaxy_cli::artifact::UploadArtifactArgs;
use super::common::parse_ambient_task_id;
use crate::ai::agent::api::ServerConversationToken;
@@ -4,7 +4,7 @@ use std::path::PathBuf;
use chrono::Utc;
use tempfile::tempdir;
use warp_cli::artifact::UploadArtifactArgs;
use galaxy_cli::artifact::UploadArtifactArgs;
use super::*;
use crate::ai::agent::api::ServerConversationToken;
+5 -5
View File
@@ -7,10 +7,10 @@ use std::time::Duration;
use futures::TryFutureExt;
use inquire::{InquireError, Select};
use warp_cli::agent::Harness;
use warp_cli::environment::{EnvironmentCreateArgs, EnvironmentUpdateArgs};
use warpui::r#async::FutureExt;
use warpui::{AppContext, GetSingletonModelHandle, SingletonEntity as _, UpdateModel};
use galaxy_cli::agent::Harness;
use galaxy_cli::environment::{EnvironmentCreateArgs, EnvironmentUpdateArgs};
use galaxyui::r#async::FutureExt;
use galaxyui::{AppContext, GetSingletonModelHandle, SingletonEntity as _, UpdateModel};
use crate::ai::agent::conversation::ServerAIConversationMetadata;
use crate::ai::agent_sdk::driver::{AgentDriverError, WARP_DRIVE_SYNC_TIMEOUT};
@@ -252,7 +252,7 @@ impl EnvironmentChoice {
// If there are no synced environments, require the user to create one or use --no-environment.
if options.len() == 1 {
let cli_name = warp_cli::binary_name().unwrap_or_else(|| "warp".to_string());
let cli_name = galaxy_cli::binary_name().unwrap_or_else(|| "warp".to_string());
return Err(ResolveConfigurationError::Other(anyhow::anyhow!(
"No environments are configured for this account.\n\
You can create an environment with `{cli_name} environment create`.\n\
+1 -1
View File
@@ -2,7 +2,7 @@ use std::path::Path;
use anyhow::Context as _;
use serde_json::{Map, Value};
use warp_cli::mcp::MCPSpec;
use galaxy_cli::mcp::MCPSpec;
use crate::ai::ambient_agents::AgentConfigSnapshot;
+1 -1
View File
@@ -5,7 +5,7 @@ use std::io::Write as _;
use serde_json::json;
use crate::ai::ambient_agents::AgentConfigSnapshot;
use warp_cli::mcp::MCPSpec;
use galaxy_cli::mcp::MCPSpec;
fn write_temp(suffix: &str, contents: &str) -> tempfile::NamedTempFile {
let mut file = tempfile::Builder::new().suffix(suffix).tempfile().unwrap();
+13 -13
View File
@@ -76,13 +76,13 @@ use futures::{
};
use oneshot::{Canceled, Receiver, Sender};
use uuid::Uuid;
use warp_cli::agent::{Harness, OutputFormat};
use warp_cli::mcp::MCPSpec;
use warp_cli::share::ShareRequest;
use warp_core::{features::FeatureFlag, report_error, report_if_error, safe_debug, safe_info};
use warp_graphql::ai::AgentTaskState;
use warp_managed_secrets::ManagedSecretValue;
use warpui::{
use galaxy_cli::agent::{Harness, OutputFormat};
use galaxy_cli::mcp::MCPSpec;
use galaxy_cli::share::ShareRequest;
use galaxy_core::{features::FeatureFlag, report_error, report_if_error, safe_debug, safe_info};
use galaxy_graphql::ai::AgentTaskState;
use galaxy_managed_secrets::ManagedSecretValue;
use galaxyui::{
r#async::{FutureExt, TimeoutError},
AppContext, Entity, ModelContext, ModelHandle, ModelSpawner, SingletonEntity,
};
@@ -441,8 +441,8 @@ pub enum AgentDriverError {
},
}
impl From<warpui::ModelDropped> for AgentDriverError {
fn from(_: warpui::ModelDropped) -> Self {
impl From<galaxyui::ModelDropped> for AgentDriverError {
fn from(_: galaxyui::ModelDropped) -> Self {
AgentDriverError::InvalidRuntimeState
}
}
@@ -596,7 +596,7 @@ impl AgentDriver {
// Signal to third-party harnesses (e.g. Claude Code) that we're in a sandbox
// so they allow root execution with permissive flags.
if warp_isolation_platform::detect().is_some() {
if galaxy_isolation_platform::detect().is_some() {
env_vars.insert(OsString::from("IS_SANDBOX"), OsString::from("1"));
}
@@ -729,7 +729,7 @@ impl AgentDriver {
) {
let timeout = idle_timeout.min(SETUP_FAILED_IDLE_TIMEOUT);
log::info!("Environment setup failed; keeping session alive for {timeout:?}");
warpui::r#async::Timer::after(timeout).await;
galaxyui::r#async::Timer::after(timeout).await;
}
}
@@ -1402,7 +1402,7 @@ impl AgentDriver {
// and then call stop_sharing_session when they're done. To know when streams are finished, we would need to modify start_ordered_terminal_events_listener
// to send a message when the streams are finished, flushed, and the websocket is disconnected. For now, we'll just sleep for a second, as this seems
// to be enough time for the streams to be finished and the events to be flushed.
warpui::r#async::Timer::after(Duration::from_secs(1)).await;
galaxyui::r#async::Timer::after(Duration::from_secs(1)).await;
conversation_status.into_result()
}
@@ -1569,7 +1569,7 @@ impl AgentDriver {
let command_result = loop {
futures::select! {
exit_code = command_handle => break exit_code,
_ = warpui::r#async::Timer::after(HARNESS_SAVE_INTERVAL).fuse() => {
_ = galaxyui::r#async::Timer::after(HARNESS_SAVE_INTERVAL).fuse() => {
log::debug!("Triggering periodic save of harness conversation data");
report_if_error!(runner
.save_conversation(SavePoint::Periodic, foreground)
+1 -1
View File
@@ -8,7 +8,7 @@ use futures::TryStreamExt as _;
use mime_guess::from_path;
use tokio::fs;
use tokio_util::io::StreamReader;
use warp_core::features::FeatureFlag;
use galaxy_core::features::FeatureFlag;
use crate::ai::agent_sdk::retry::with_bounded_retry;
use crate::ai::ambient_agents::task::{AttachmentInput, TaskAttachment};
@@ -1,7 +1,7 @@
use std::{collections::HashMap, ffi::OsString, future::Future, pin::Pin};
use anyhow::Error;
use warpui::ModelSpawner;
use galaxyui::ModelSpawner;
use super::terminal::TerminalDriver;
use crate::ai::cloud_environments::ProvidersConfig;
@@ -3,9 +3,9 @@ use std::{collections::HashMap, ffi::OsString, future::Future, pin::Pin, time::D
use anyhow::Context;
use tempfile::{Builder, NamedTempFile};
use vec1::Vec1;
use warp_core::safe_info;
use warp_managed_secrets::ManagedSecretManager;
use warpui::{ModelSpawner, SingletonEntity};
use galaxy_core::safe_info;
use galaxy_managed_secrets::ManagedSecretManager;
use galaxyui::{ModelSpawner, SingletonEntity};
use crate::ai::aws_credentials::aws_role_session_name;
use crate::ai::cloud_environments::AwsProviderConfig;
@@ -93,7 +93,7 @@ impl CloudProvider for AwsCloudProvider {
ManagedSecretManager::handle(ctx)
.as_ref(ctx)
.issue_task_identity_token(
warp_managed_secrets::client::IdentityTokenOptions {
galaxy_managed_secrets::client::IdentityTokenOptions {
audience,
requested_duration: duration,
subject_template,
@@ -1,7 +1,7 @@
use std::{collections::HashMap, ffi::OsString, future::Future, pin::Pin, time::Duration};
use anyhow::Context as _;
use warp_managed_secrets::{GcpCredentials, GcpFederationConfig};
use galaxy_managed_secrets::{GcpCredentials, GcpFederationConfig};
use crate::ai::cloud_environments::GcpProviderConfig;
+7 -7
View File
@@ -14,12 +14,12 @@ use ai::index::full_source_code_embedding::manager::{
};
use futures::{channel::oneshot, future::join_all};
use repo_metadata::repositories::{DetectedRepositories, RepoDetectionSource};
use warp_completer::completer::CommandExitStatus;
use warp_core::{command::ExitCode, safe_info, safe_warn};
use warpui::{r#async::FutureExt, ModelContext, ModelSpawner, SingletonEntity};
use galaxy_completer::completer::CommandExitStatus;
use galaxy_core::{command::ExitCode, safe_info, safe_warn};
use galaxyui::{r#async::FutureExt, ModelContext, ModelSpawner, SingletonEntity};
use super::{terminal::TerminalDriver, AgentDriverError};
use warp_cli::agent::Harness;
use galaxy_cli::agent::Harness;
const CODEBASE_INDEX_SYNC_TIMEOUT: Duration = Duration::from_secs(60);
@@ -260,10 +260,10 @@ async fn prepare_environment_impl(
// We also skip this in Namespace to reduce startup time.
#[cfg(not(target_family = "wasm"))]
let should_wait_for_indexing = !matches!(
warp_isolation_platform::detect(),
galaxy_isolation_platform::detect(),
Some(
warp_isolation_platform::IsolationPlatformType::DockerSandbox
| warp_isolation_platform::IsolationPlatformType::Namespace
galaxy_isolation_platform::IsolationPlatformType::DockerSandbox
| galaxy_isolation_platform::IsolationPlatformType::Namespace
)
);
#[cfg(target_family = "wasm")]
@@ -1,6 +1,6 @@
use crate::ai::blocklist::task_status_sync_model::classify_renderable_error;
use crate::server::server_api::ai::TaskStatusUpdate;
use warp_graphql::ai::{AgentTaskState, PlatformErrorCode};
use galaxy_graphql::ai::{AgentTaskState, PlatformErrorCode};
use super::terminal::ShareSessionError;
use super::AgentDriverError;
@@ -71,7 +71,7 @@ pub fn classify_driver_error(error: &AgentDriverError) -> (AgentTaskState, TaskS
),
),
AgentDriverError::NotLoggedIn => {
let bin = warp_cli::binary_name().unwrap_or_else(|| "warp".to_string());
let bin = galaxy_cli::binary_name().unwrap_or_else(|| "warp".to_string());
(
AgentTaskState::Error,
TaskStatusUpdate::with_error_code(
@@ -1,4 +1,4 @@
use warp_graphql::ai::{AgentTaskState, PlatformErrorCode};
use galaxy_graphql::ai::{AgentTaskState, PlatformErrorCode};
use super::classify_driver_error;
use crate::ai::agent_sdk::driver::terminal::ShareSessionError;
@@ -10,8 +10,8 @@ use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};
use tempfile::NamedTempFile;
use uuid::Uuid;
use warp_cli::agent::Harness;
use warpui::{ModelHandle, ModelSpawner};
use galaxy_cli::agent::Harness;
use galaxyui::{ModelHandle, ModelSpawner};
use crate::ai::agent::conversation::AIConversationId;
use crate::ai::ambient_agents::AmbientAgentTaskId;
@@ -20,8 +20,8 @@ use serde::{Deserialize, Serialize};
use tempfile::NamedTempFile;
use tokio::sync::Mutex as AsyncMutex;
use uuid::Uuid;
use warpui::r#async::SpawnedFutureHandle;
use warpui::ModelSpawner;
use galaxyui::r#async::SpawnedFutureHandle;
use galaxyui::ModelSpawner;
use crate::ai::agent_events::{
run_agent_event_driver, AgentEventConsumer, AgentEventConsumerControlFlow,
@@ -22,7 +22,7 @@ use anyhow::{Context, Result};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use uuid::Uuid;
use warp_core::safe_warn;
use galaxy_core::safe_warn;
use crate::ai::agent::conversation::AIConversationId;
@@ -8,9 +8,9 @@ use parking_lot::Mutex;
use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};
use tempfile::NamedTempFile;
use warp_cli::agent::Harness;
use warp_managed_secrets::ManagedSecretValue;
use warpui::{ModelHandle, ModelSpawner};
use galaxy_cli::agent::Harness;
use galaxy_managed_secrets::ManagedSecretValue;
use galaxyui::{ModelHandle, ModelSpawner};
use crate::ai::agent::conversation::AIConversationId;
use crate::ai::ambient_agents::AmbientAgentTaskId;
+5 -5
View File
@@ -9,9 +9,9 @@ use std::sync::Arc;
use anyhow::{Context, Result};
use async_trait::async_trait;
use tempfile::NamedTempFile;
use warp_cli::agent::Harness;
use warp_managed_secrets::ManagedSecretValue;
use warpui::{ModelHandle, ModelSpawner, SingletonEntity};
use galaxy_cli::agent::Harness;
use galaxy_managed_secrets::ManagedSecretValue;
use galaxyui::{ModelHandle, ModelSpawner, SingletonEntity};
use crate::ai::agent::conversation::AIConversationId;
use crate::ai::ambient_agents::AmbientAgentTaskId;
@@ -21,11 +21,11 @@ use crate::terminal::cli_agent_sessions::{CLIAgentSessionStatus, CLIAgentSession
use crate::terminal::model::block::{BlockId, SerializedBlock};
use crate::terminal::CLIAgent;
use crate::util::path::resolve_executable;
use warp_cli::{
use galaxy_cli::{
OZ_CLI_ENV, OZ_HARNESS_ENV, OZ_PARENT_RUN_ID_ENV, OZ_RUN_ID_ENV, SERVER_ROOT_URL_OVERRIDE_ENV,
SESSION_SHARING_SERVER_URL_OVERRIDE_ENV, WS_SERVER_URL_OVERRIDE_ENV,
};
use warp_core::channel::ChannelState;
use galaxy_core::channel::ChannelState;
use super::terminal::{CommandHandle, TerminalDriver};
use super::{
+1 -1
View File
@@ -1289,7 +1289,7 @@ pub mod json {
use crate::ai::agent::{AIAgentText, AIAgentTextSection};
use crate::code::editor_management::CodeSource;
use std::io::{self, BufWriter, Write};
use warp_core::channel::ChannelState;
use galaxy_core::channel::ChannelState;
/// Constructs the Oz dashboard URL for a given run ID.
fn run_url(run_id: &str) -> String {
+2 -2
View File
@@ -34,8 +34,8 @@ use anyhow::Result;
use command::r#async::Command;
use command::Stdio;
use futures::future::join_all;
use warp_core::report_error;
use warpui::r#async::FutureExt as _;
use galaxy_core::report_error;
use galaxyui::r#async::FutureExt as _;
use crate::ai::agent_sdk::retry::with_bounded_retry;
use crate::ai::ambient_agents::AmbientAgentTaskId;
+8 -8
View File
@@ -12,12 +12,12 @@ use std::{
use futures::channel::oneshot;
use session_sharing_protocol::common::{Role, SessionId};
use session_sharing_protocol::sharer::SessionSourceType;
use warp_cli::share::{ShareAccessLevel, ShareRequest, ShareSubject};
use warp_completer::completer::CommandOutput;
use warp_core::command::ExitCode;
use warp_core::features::FeatureFlag;
use warp_util::path::ShellFamily;
use warpui::{
use galaxy_cli::share::{ShareAccessLevel, ShareRequest, ShareSubject};
use galaxy_completer::completer::CommandOutput;
use galaxy_core::command::ExitCode;
use galaxy_core::features::FeatureFlag;
use galaxy_util::path::ShellFamily;
use galaxyui::{
r#async::FutureExt, AppContext, Entity, ModelContext, ModelHandle, SingletonEntity as _,
ViewHandle,
};
@@ -198,7 +198,7 @@ impl TerminalDriver {
// When sharing is disabled (or running against ngrok), leave both halves
// as None so that `wait_for_session_shared` returns immediately.
let sharing_expected =
should_share && !warp_core::channel::ChannelState::server_root_url().contains("ngrok");
should_share && !galaxy_core::channel::ChannelState::server_root_url().contains("ngrok");
let (mut session_share_tx, session_share_rx) = if sharing_expected {
if !FeatureFlag::CreatingSharedSessions.is_enabled() {
// Session sharing was requested but the feature is not enabled for this
@@ -272,7 +272,7 @@ impl TerminalDriver {
pub fn with_terminal_view(
&self,
ctx: &mut ModelContext<Self>,
f: impl FnOnce(&mut TerminalView, &mut warpui::ViewContext<TerminalView>),
f: impl FnOnce(&mut TerminalView, &mut galaxyui::ViewContext<TerminalView>),
) {
self.terminal_view.update(ctx, f);
}
+3 -3
View File
@@ -1,12 +1,12 @@
use std::{ffi::OsString, sync::Arc, time::Duration};
use futures::channel::oneshot;
use warp_cli::agent::Harness;
use warp_cli::{
use galaxy_cli::agent::Harness;
use galaxy_cli::{
OZ_CLI_ENV, OZ_HARNESS_ENV, OZ_PARENT_RUN_ID_ENV, OZ_RUN_ID_ENV, SERVER_ROOT_URL_OVERRIDE_ENV,
SESSION_SHARING_SERVER_URL_OVERRIDE_ENV, WS_SERVER_URL_OVERRIDE_ENV,
};
use warp_core::channel::ChannelState;
use galaxy_core::channel::ChannelState;
use super::{
IdleTimeoutSender, LEGACY_OZ_PARENT_LISTENER_MANAGED_EXTERNALLY_ENV,
+35 -35
View File
@@ -3,14 +3,14 @@ use std::collections::HashSet;
use comfy_table::Cell;
use inquire::{error::InquireError, Confirm, Select};
use serde::Serialize;
use warp_cli::{
use galaxy_cli::{
agent::OutputFormat,
environment::{EnvironmentCommand, ImageCommand},
scope::ObjectScope,
GlobalOptions,
};
use warpui::r#async::FutureExt;
use warpui::{AppContext, ModelContext, SingletonEntity};
use galaxyui::r#async::FutureExt;
use galaxyui::{AppContext, ModelContext, SingletonEntity};
use crate::ai::agent_sdk::output::{self, TableFormat};
@@ -32,11 +32,11 @@ use crate::util::time_format::format_approx_duration_from_now_utc;
use crate::workspaces::user_profiles::UserProfiles;
use crate::CloudObjectTypeAndId;
use cynic::QueryBuilder;
use warp_graphql::queries::get_oauth_connect_tx_status::OauthConnectTxStatus;
use warp_graphql::queries::list_warp_dev_images::{
use galaxy_graphql::queries::get_oauth_connect_tx_status::OauthConnectTxStatus;
use galaxy_graphql::queries::list_warp_dev_images::{
ListWarpDevImages, ListWarpDevImagesResult, ListWarpDevImagesVariables,
};
use warp_graphql::queries::user_repo_auth_status::UserRepoAuthStatusEnum;
use galaxy_graphql::queries::user_repo_auth_status::UserRepoAuthStatusEnum;
const WARP_DEV_ENVIRONMENTS_REPO: &str = "https://github.com/warpdotdev/warp-dev-environments";
@@ -174,7 +174,7 @@ impl EnvironmentCommandRunner {
);
}
output::print_list(image_infos, global_options.output_format);
ctx.terminate_app(warpui::platform::TerminationMode::ForceTerminate, None);
ctx.terminate_app(galaxyui::platform::TerminationMode::ForceTerminate, None);
}
ListWarpDevImagesResult::UserFacingError(_) | ListWarpDevImagesResult::Unknown => {
super::report_fatal_error(anyhow::anyhow!("Failed to fetch images"), ctx);
@@ -253,7 +253,7 @@ impl EnvironmentCommandRunner {
output::print_list(environment_infos, global_options.output_format);
ctx.terminate_app(warpui::platform::TerminationMode::ForceTerminate, None);
ctx.terminate_app(galaxyui::platform::TerminationMode::ForceTerminate, None);
});
}
@@ -276,7 +276,7 @@ impl EnvironmentCommandRunner {
Ok(sid) => sid,
Err(_) => {
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(anyhow::anyhow!("Environment {} not found", id))),
);
return;
@@ -287,10 +287,10 @@ impl EnvironmentCommandRunner {
if let Some(environment) = environment {
Self::print_environment_details(&environment.model().string_model);
ctx.terminate_app(warpui::platform::TerminationMode::ForceTerminate, None);
ctx.terminate_app(galaxyui::platform::TerminationMode::ForceTerminate, None);
} else {
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(anyhow::anyhow!("Environment {} not found", id))),
);
}
@@ -330,7 +330,7 @@ impl EnvironmentCommandRunner {
match err {
InquireError::OperationCanceled | InquireError::OperationInterrupted => {
eprintln!("Environment creation canceled.");
ctx.terminate_app(warpui::platform::TerminationMode::ForceTerminate, None);
ctx.terminate_app(galaxyui::platform::TerminationMode::ForceTerminate, None);
true
}
_ => false,
@@ -426,7 +426,7 @@ impl EnvironmentCommandRunner {
docker_image: Option<String>,
github_repos: Vec<GithubRepo>,
setup_commands: Vec<String>,
scope: warp_cli::scope::ObjectScope,
scope: galaxy_cli::scope::ObjectScope,
ctx: &mut ModelContext<Self>,
) {
if let Some(image) = docker_image {
@@ -464,7 +464,7 @@ impl EnvironmentCommandRunner {
docker_image: String,
github_repos: Vec<GithubRepo>,
setup_commands: Vec<String>,
scope: warp_cli::scope::ObjectScope,
scope: galaxy_cli::scope::ObjectScope,
ctx: &mut ModelContext<Self>,
) {
let initial_sync = UpdateManager::as_ref(ctx)
@@ -521,7 +521,7 @@ impl EnvironmentCommandRunner {
if attempt > MAX_AUTH_ATTEMPTS {
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(anyhow::anyhow!(
"Exceeded maximum number of authorization attempts ({}). Please try again later.",
MAX_AUTH_ATTEMPTS
@@ -582,7 +582,7 @@ impl EnvironmentCommandRunner {
if private_repo_owners.len() > 1 {
let owners_str = private_repo_owners.into_iter().collect::<Vec<_>>().join(", ");
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(anyhow::anyhow!(
"All private repositories in an environment must belong to the same owner. Found multiple owners: {}.\nIf you need support for private repos from multiple owners, please submit a GitHub issue.",
owners_str
@@ -644,7 +644,7 @@ impl EnvironmentCommandRunner {
}
Ok(OauthConnectTxStatus::Failed) => {
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(anyhow::anyhow!(
"GitHub authorization failed. Please try again."
))),
@@ -652,7 +652,7 @@ impl EnvironmentCommandRunner {
}
Ok(OauthConnectTxStatus::Expired) => {
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(anyhow::anyhow!(
"GitHub authorization expired. Please try again."
))),
@@ -662,7 +662,7 @@ impl EnvironmentCommandRunner {
| Ok(OauthConnectTxStatus::InProgress) => {
// Should not be returned by poll_oauth_until_terminal.
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(anyhow::anyhow!(
"Unexpected non-terminal OAuth status returned"
))),
@@ -670,7 +670,7 @@ impl EnvironmentCommandRunner {
}
Err(err) => {
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(anyhow::anyhow!(
"Error polling OAuth status: {err}"
))),
@@ -685,14 +685,14 @@ impl EnvironmentCommandRunner {
println!("\nAuthorize access here: {auth_url}\n");
println!("After authorizing, please re-run this command.");
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
None,
);
}
(None, Some(_)) => {
// Server returned txId without authUrl - unexpected.
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(anyhow::anyhow!(
"Server error: did not receive auth URL for OAuth flow"
))),
@@ -701,7 +701,7 @@ impl EnvironmentCommandRunner {
(None, None) => {
// No auth URL or txId provided, but we have auth issues.
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(anyhow::anyhow!(
"Cannot {} environment: authorization required but no auth flow provided by server",
operation_name
@@ -712,7 +712,7 @@ impl EnvironmentCommandRunner {
}
Err(e) => {
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(e.context("Failed to check GitHub auth status"))),
);
}
@@ -764,7 +764,7 @@ impl EnvironmentCommandRunner {
{
let server_id = result.server_id.unwrap();
println!("Environment created successfully with ID: {server_id}");
ctx.terminate_app(warpui::platform::TerminationMode::ForceTerminate, None);
ctx.terminate_app(galaxyui::platform::TerminationMode::ForceTerminate, None);
}
}
});
@@ -807,13 +807,13 @@ impl EnvironmentCommandRunner {
Ok(false) | Err(InquireError::OperationCanceled | InquireError::OperationInterrupted) => {
println!("Environment {action} canceled.");
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
None,
);
}
Err(err) => {
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(anyhow::anyhow!("Error prompting for confirmation: {err}"))),
);
}
@@ -824,7 +824,7 @@ impl EnvironmentCommandRunner {
}
Err(_) => {
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(anyhow::anyhow!(
"Aborting environment {action} because integration usage could not be determined. Re-run with --force to override."
))),
@@ -868,7 +868,7 @@ impl EnvironmentCommandRunner {
Err(_) => {
let error = anyhow::anyhow!("Environment {} not found", id);
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(error)),
);
return;
@@ -879,7 +879,7 @@ impl EnvironmentCommandRunner {
let Some(environment) = environment else {
let error = anyhow::anyhow!("Environment {} not found", id);
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(error)),
);
return;
@@ -1011,7 +1011,7 @@ impl EnvironmentCommandRunner {
println!("Environment updated successfully!\n");
Self::print_environment_details(&updated_env);
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
None,
);
}
@@ -1047,7 +1047,7 @@ impl EnvironmentCommandRunner {
Err(_) => {
let error = anyhow::anyhow!("Environment {} not found", id);
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(error)),
);
return;
@@ -1058,7 +1058,7 @@ impl EnvironmentCommandRunner {
let Some(environment) = environment else {
let error = anyhow::anyhow!("Environment {} not found", id);
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
Some(Err(error)),
);
return;
@@ -1094,7 +1094,7 @@ impl EnvironmentCommandRunner {
OperationSuccessType::Success => {
println!("Environment deleted successfully");
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
galaxyui::platform::TerminationMode::ForceTerminate,
None,
);
}
@@ -1111,7 +1111,7 @@ impl EnvironmentCommandRunner {
}
}
impl warpui::Entity for EnvironmentCommandRunner {
impl galaxyui::Entity for EnvironmentCommandRunner {
type Event = ();
}
impl SingletonEntity for EnvironmentCommandRunner {}
+6 -6
View File
@@ -2,11 +2,11 @@ use std::process;
use anyhow::{anyhow, Result};
use serde_json::json;
use warp_cli::federate::{FederateCommand, IssueGcpTokenArgs, IssueTokenArgs};
use warp_cli::{agent::OutputFormat, GlobalOptions};
use warp_core::{features::FeatureFlag, report_error};
use warp_managed_secrets::ManagedSecretManager;
use warpui::{platform::TerminationMode, AppContext, SingletonEntity as _};
use galaxy_cli::federate::{FederateCommand, IssueGcpTokenArgs, IssueTokenArgs};
use galaxy_cli::{agent::OutputFormat, GlobalOptions};
use galaxy_core::{features::FeatureFlag, report_error};
use galaxy_managed_secrets::ManagedSecretManager;
use galaxyui::{platform::TerminationMode, AppContext, SingletonEntity as _};
use super::common::set_ambient_task_context_from_run_id;
@@ -43,7 +43,7 @@ fn issue_token(
ManagedSecretManager::handle(ctx).update(ctx, move |manager, ctx| {
let future =
manager.issue_task_identity_token(warp_managed_secrets::client::IdentityTokenOptions {
manager.issue_task_identity_token(galaxy_managed_secrets::client::IdentityTokenOptions {
audience,
requested_duration: duration,
subject_template,
+6 -6
View File
@@ -4,14 +4,14 @@
//! - [`ping`] — fetches the current run by task ID and prints its info.
//! - [`report_artifact`] — reports an artifact (e.g. a PR) back to the Oz platform.
use anyhow::Result;
use warp_cli::agent::OutputFormat;
use warp_cli::harness_support::{
use galaxy_cli::agent::OutputFormat;
use galaxy_cli::harness_support::{
FinishTaskArgs, HarnessSupportArgs, HarnessSupportCommand, NotifyUserArgs, ReportArtifactArgs,
ReportArtifactCommand, TaskStatus,
};
use warp_cli::GlobalOptions;
use warp_core::features::FeatureFlag;
use warpui::{platform::TerminationMode, AppContext, ModelHandle, SingletonEntity};
use galaxy_cli::GlobalOptions;
use galaxy_core::features::FeatureFlag;
use galaxyui::{platform::TerminationMode, AppContext, ModelHandle, SingletonEntity};
use super::common::set_ambient_task_context_from_run_id;
use crate::ai::ambient_agents::AmbientAgentTaskId;
@@ -206,7 +206,7 @@ fn finish_task(
/// Singleton model for running async harness-support operations.
struct HarnessSupportRunner;
impl warpui::Entity for HarnessSupportRunner {
impl galaxyui::Entity for HarnessSupportRunner {
type Event = ();
}
+6 -6
View File
@@ -1,14 +1,14 @@
use crate::server::server_api::ServerApiProvider;
use futures::future;
use warp_cli::{
use galaxy_cli::{
integration::{CreateIntegrationArgs, IntegrationCommand, UpdateIntegrationArgs},
provider::ProviderType,
GlobalOptions,
};
use warp_graphql::mutations::create_simple_integration::CreateSimpleIntegrationOutput;
use warp_graphql::queries::get_oauth_connect_tx_status::OauthConnectTxStatus;
use warp_graphql::queries::get_simple_integrations::SimpleIntegrationsOutput;
use warpui::{platform::TerminationMode, AppContext, ModelContext, SingletonEntity};
use galaxy_graphql::mutations::create_simple_integration::CreateSimpleIntegrationOutput;
use galaxy_graphql::queries::get_oauth_connect_tx_status::OauthConnectTxStatus;
use galaxy_graphql::queries::get_simple_integrations::SimpleIntegrationsOutput;
use galaxyui::{platform::TerminationMode, AppContext, ModelContext, SingletonEntity};
use super::common::{EnvironmentChoice, ResolveConfigurationError};
use super::integration_output;
@@ -518,7 +518,7 @@ impl IntegrationCommandRunner {
}
}
impl warpui::Entity for IntegrationCommandRunner {
impl galaxyui::Entity for IntegrationCommandRunner {
type Event = ();
}
impl SingletonEntity for IntegrationCommandRunner {}
+2 -2
View File
@@ -2,11 +2,11 @@ use chrono::{DateTime, Utc};
use comfy_table::{presets::UTF8_FULL, Cell, Table};
use serde::Serialize;
use serde_json::{Map, Value};
use warp_cli::agent::OutputFormat;
use galaxy_cli::agent::OutputFormat;
use crate::ai::agent_sdk::output::{self, TableFormat};
use crate::util::time_format::format_approx_duration_from_now_utc;
use warp_graphql::queries::get_simple_integrations::{
use galaxy_graphql::queries::get_simple_integrations::{
ListedSimpleIntegrationConfig, SimpleIntegration, SimpleIntegrationConnectionStatus,
SimpleIntegrationsOutput,
};
+4 -4
View File
@@ -1,7 +1,7 @@
use comfy_table::Cell;
use serde::Serialize;
use warp_cli::{mcp::MCPCommand, GlobalOptions};
use warpui::{AppContext, ModelContext, SingletonEntity};
use galaxy_cli::{mcp::MCPCommand, GlobalOptions};
use galaxyui::{AppContext, ModelContext, SingletonEntity};
use crate::ai::agent_sdk::output::{self, TableFormat};
use crate::ai::mcp::TemplatableMCPServerManager;
@@ -40,12 +40,12 @@ impl MCPCommandRunner {
global_options.output_format,
);
ctx.terminate_app(warpui::platform::TerminationMode::ForceTerminate, None);
ctx.terminate_app(galaxyui::platform::TerminationMode::ForceTerminate, None);
});
}
}
impl warpui::Entity for MCPCommandRunner {
impl galaxyui::Entity for MCPCommandRunner {
type Event = ();
}
impl SingletonEntity for MCPCommandRunner {}
+1 -1
View File
@@ -1,6 +1,6 @@
use anyhow::Context as _;
use serde_json::{Map, Value};
use warp_cli::mcp::MCPSpec;
use galaxy_cli::mcp::MCPSpec;
use crate::ai::mcp::TemplatableMCPServer;
+1 -1
View File
@@ -1,5 +1,5 @@
use serde_json::{json, Map, Value};
use warp_cli::mcp::MCPSpec;
use galaxy_cli::mcp::MCPSpec;
use super::build_mcp_servers_from_specs;
+14 -14
View File
@@ -24,7 +24,7 @@ use crate::server::server_api::ai::AIClient;
use crate::workflows::workflow::Workflow;
use ai::api_keys::{ApiKeyManager, AwsCredentialsRefreshStrategy};
use anyhow::Context;
use warp_cli::{
use galaxy_cli::{
agent::{AgentCommand, AgentProfileCommand, OutputFormat},
artifact::ArtifactCommand,
environment::{EnvironmentCommand, ImageCommand},
@@ -40,13 +40,13 @@ use warp_cli::{
task::{MessageCommand, TaskCommand},
CliCommand, GlobalOptions,
};
use warp_core::features::FeatureFlag;
use warp_isolation_platform::IsolationPlatformError;
use galaxy_core::features::FeatureFlag;
use galaxy_isolation_platform::IsolationPlatformError;
#[cfg(not(target_family = "wasm"))]
use warp_logging::log_file_path;
use warp_managed_secrets::ManagedSecretManager;
use warpui::ModelSpawner;
use warpui::{platform::TerminationMode, AppContext, SingletonEntity};
use galaxy_logging::log_file_path;
use galaxy_managed_secrets::ManagedSecretManager;
use galaxyui::ModelSpawner;
use galaxyui::{platform::TerminationMode, AppContext, SingletonEntity};
use crate::{
ai::ambient_agents::{task::HarnessConfig, AmbientAgentTaskId},
@@ -60,7 +60,7 @@ use crate::{
terminal::view::ConversationRestorationInNewPaneType,
};
use driver::AgentDriverError;
use warp_graphql::object_permissions::OwnerType;
use galaxy_graphql::object_permissions::OwnerType;
use crate::ai::attachment_utils::attachments_download_dir;
use crate::ai::skills::{
@@ -72,8 +72,8 @@ pub(crate) use driver::harness::{
};
pub use driver::AgentDriver;
use telemetry::CliTelemetryEvent;
use warp_cli::agent::{Harness, Prompt, RunAgentArgs};
use warp_cli::OZ_HARNESS_ENV;
use galaxy_cli::agent::{Harness, Prompt, RunAgentArgs};
use galaxy_cli::OZ_HARNESS_ENV;
mod admin;
mod agent_config;
@@ -510,7 +510,7 @@ fn run_task(
));
}
match conv_cmd {
warp_cli::task::ConversationCommand::Get(args) => {
galaxy_cli::task::ConversationCommand::Get(args) => {
ambient::get_conversation(ctx, args.conversation_id)
}
}
@@ -531,11 +531,11 @@ fn run_task(
/// requires spawning an async task, which requires a ModelContext.
struct AgentDriverRunner;
impl warpui::Entity for AgentDriverRunner {
impl galaxyui::Entity for AgentDriverRunner {
type Event = ();
}
impl warpui::SingletonEntity for AgentDriverRunner {}
impl galaxyui::SingletonEntity for AgentDriverRunner {}
impl AgentDriverRunner {
async fn setup_and_run_driver(
@@ -1301,7 +1301,7 @@ fn launch_command(
return dispatch_command(ctx, command, global_options);
}
let cli_name = warp_cli::binary_name().unwrap_or_else(|| "warp".to_string());
let cli_name = galaxy_cli::binary_name().unwrap_or_else(|| "warp".to_string());
let auth_state = AuthStateProvider::handle(ctx).as_ref(ctx).get();
if !auth_state.is_logged_in() {
+2 -2
View File
@@ -1,10 +1,10 @@
use serde_json::json;
use warp_cli::{
use galaxy_cli::{
artifact::{ArtifactCommand, DownloadArtifactArgs, GetArtifactArgs, UploadArtifactArgs},
task::{MessageCommand, MessageSendArgs, MessageWatchArgs, TaskCommand},
CliCommand,
};
use warp_core::telemetry::TelemetryEvent;
use galaxy_core::telemetry::TelemetryEvent;
use super::{command_requires_auth, command_to_telemetry_event};
+3 -3
View File
@@ -4,8 +4,8 @@ use crate::ai::agent_sdk::output::{self, TableFormat};
use crate::ai::llms::LLMPreferences;
use comfy_table::Cell;
use serde::Serialize;
use warp_cli::{model::ModelCommand, GlobalOptions};
use warpui::{platform::TerminationMode, AppContext, ModelContext, SingletonEntity};
use galaxy_cli::{model::ModelCommand, GlobalOptions};
use galaxyui::{platform::TerminationMode, AppContext, ModelContext, SingletonEntity};
/// Handle model-related CLI commands.
pub fn run(
@@ -59,7 +59,7 @@ impl ModelCommandRunner {
}
}
impl warpui::Entity for ModelCommandRunner {
impl galaxyui::Entity for ModelCommandRunner {
type Event = ();
}
+2 -2
View File
@@ -2,10 +2,10 @@ use std::sync::Arc;
use std::time::Duration;
use anyhow::{anyhow, Result};
use warpui::r#async::Timer;
use galaxyui::r#async::Timer;
use crate::server::server_api::integrations::IntegrationsClient;
use warp_graphql::queries::get_oauth_connect_tx_status::OauthConnectTxStatus;
use galaxy_graphql::queries::get_oauth_connect_tx_status::OauthConnectTxStatus;
/// Shared helpers for OAuth-based connect flows (txId + polling).
///
+2 -2
View File
@@ -11,8 +11,8 @@ use jaq_all::fmts::Format;
use jaq_json::{write as jaq_write, Val};
use serde::Serialize;
use tabwriter::TabWriter;
use warp_cli::agent::OutputFormat;
use warp_cli::json_filter::{JqFilter, JsonOutput};
use galaxy_cli::agent::OutputFormat;
use galaxy_cli::json_filter::{JqFilter, JsonOutput};
pub fn standard_table() -> Table {
let mut table = Table::new();
+2 -2
View File
@@ -4,8 +4,8 @@ use super::{
use comfy_table::Cell;
use serde::Serialize;
use serde_json::json;
use warp_cli::agent::OutputFormat;
use warp_cli::json_filter::parse_jq_filter;
use galaxy_cli::agent::OutputFormat;
use galaxy_cli::json_filter::parse_jq_filter;
#[derive(Serialize)]
struct TestItem {
+4 -4
View File
@@ -1,7 +1,7 @@
use comfy_table::Cell;
use serde::Serialize;
use warp_cli::{agent::AgentProfileCommand, GlobalOptions};
use warpui::{AppContext, ModelContext, SingletonEntity};
use galaxy_cli::{agent::AgentProfileCommand, GlobalOptions};
use galaxyui::{AppContext, ModelContext, SingletonEntity};
use crate::ai::agent_sdk::output::{self, TableFormat};
use crate::ai::execution_profiles::profiles::AIExecutionProfilesModel;
@@ -52,12 +52,12 @@ impl ProfilesCommandRunner {
output::print_list(profiles, global_options.output_format);
ctx.terminate_app(warpui::platform::TerminationMode::ForceTerminate, None);
ctx.terminate_app(galaxyui::platform::TerminationMode::ForceTerminate, None);
});
}
}
impl warpui::Entity for ProfilesCommandRunner {
impl galaxyui::Entity for ProfilesCommandRunner {
type Event = ();
}
impl SingletonEntity for ProfilesCommandRunner {}
+4 -4
View File
@@ -2,12 +2,12 @@
use crate::workspaces::user_workspaces::UserWorkspaces;
use comfy_table::Cell;
use serde::Serialize;
use warp_cli::{
use galaxy_cli::{
provider::{ProviderCommand, ProviderType},
GlobalOptions,
};
use warp_core::channel::ChannelState;
use warpui::{platform::TerminationMode, AppContext, ModelContext, SingletonEntity};
use galaxy_core::channel::ChannelState;
use galaxyui::{platform::TerminationMode, AppContext, ModelContext, SingletonEntity};
use crate::ai::agent_sdk::output::{self, TableFormat};
@@ -123,7 +123,7 @@ impl ProviderCommandRunner {
}
}
impl warpui::Entity for ProviderCommandRunner {
impl galaxyui::Entity for ProviderCommandRunner {
type Event = ();
}
impl SingletonEntity for ProviderCommandRunner {}
+2 -2
View File
@@ -9,8 +9,8 @@ use std::future::Future;
use std::time::Duration;
use anyhow::{anyhow, Result};
use warpui::duration_with_jitter;
use warpui::r#async::Timer;
use galaxyui::duration_with_jitter;
use galaxyui::r#async::Timer;
pub(crate) use crate::server::retry_strategies::is_transient_http_error;
+5 -5
View File
@@ -2,14 +2,14 @@ use chrono::{DateTime, Utc};
use comfy_table::Cell;
use futures::future;
use serde::Serialize;
use warp_cli::schedule::{
use galaxy_cli::schedule::{
CreateScheduleArgs, DeleteScheduleArgs, GetScheduleArgs, PauseScheduleArgs, ScheduleCommand,
ScheduleSubcommand, UnpauseScheduleArgs, UpdateScheduleArgs,
};
use warp_cli::{agent::OutputFormat, GlobalOptions};
use warp_graphql::queries::get_scheduled_agent_history::ScheduledAgentHistory;
use warpui::platform::TerminationMode;
use warpui::{AppContext, SingletonEntity};
use galaxy_cli::{agent::OutputFormat, GlobalOptions};
use galaxy_graphql::queries::get_scheduled_agent_history::ScheduledAgentHistory;
use galaxyui::platform::TerminationMode;
use galaxyui::{AppContext, SingletonEntity};
use crate::ai::ambient_agents::scheduled::{
CloudScheduledAmbientAgent, ScheduledAgentManager, ScheduledAmbientAgent, UpdateScheduleParams,
+5 -5
View File
@@ -8,7 +8,7 @@ use chrono::{DateTime, Utc};
use comfy_table::Cell;
use inquire::{Confirm, InquireError, Password};
use serde::Serialize;
use warp_cli::{
use galaxy_cli::{
agent::OutputFormat,
scope::ObjectScope,
secret::{
@@ -17,13 +17,13 @@ use warp_cli::{
},
GlobalOptions,
};
use warp_core::features::FeatureFlag;
use warp_graphql::{
use galaxy_core::features::FeatureFlag;
use galaxy_graphql::{
managed_secrets::{ManagedSecret, ManagedSecretType},
object::SpaceType,
};
use warp_managed_secrets::{client::SecretOwner, ManagedSecretManager, ManagedSecretValue};
use warpui::{platform::TerminationMode, AppContext, SingletonEntity as _};
use galaxy_managed_secrets::{client::SecretOwner, ManagedSecretManager, ManagedSecretValue};
use galaxyui::{platform::TerminationMode, AppContext, SingletonEntity as _};
use crate::{
auth::UserUid, cloud_object::Owner, server::ids::ServerId,
+3 -3
View File
@@ -1,7 +1,7 @@
use crate::features::FeatureFlag;
use serde_json::{json, Value};
use strum_macros::{EnumDiscriminants, EnumIter};
use warp_core::telemetry::{EnablementState, TelemetryEvent, TelemetryEventDesc};
use galaxy_core::telemetry::{EnablementState, TelemetryEvent, TelemetryEventDesc};
#[derive(Debug, EnumDiscriminants)]
#[strum_discriminants(derive(EnumIter))]
@@ -204,7 +204,7 @@ impl TelemetryEvent for CliTelemetryEvent {
}
fn event_descs() -> impl Iterator<Item = Box<dyn TelemetryEventDesc>> {
warp_core::telemetry::enum_events::<Self>()
galaxy_core::telemetry::enum_events::<Self>()
}
}
@@ -421,4 +421,4 @@ impl TelemetryEventDesc for CliTelemetryEventDiscriminants {
}
}
warp_core::register_telemetry_event!(CliTelemetryEvent);
galaxy_core::register_telemetry_event!(CliTelemetryEvent);
+6 -6
View File
@@ -18,9 +18,9 @@ use markdown_parser::FormattedTextFragment;
use std::path::Path;
use std::sync::LazyLock;
use std::time::Duration;
use warpui::keymap::Keystroke;
use warpui::r#async::SpawnedFutureHandle;
use warpui::{AppContext, Entity, ModelContext, SingletonEntity};
use galaxyui::keymap::Keystroke;
use galaxyui::r#async::SpawnedFutureHandle;
use galaxyui::{AppContext, Entity, ModelContext, SingletonEntity};
/// Trait for tip implementations that can be displayed to users.
/// Tips provide helpful information with optional links and keybindings.
@@ -526,7 +526,7 @@ impl AITipModel<AgentTip> {
// Start 60-second cooldown
let handle = ctx.spawn(
async {
warpui::r#async::Timer::after(Duration::from_secs(60)).await;
galaxyui::r#async::Timer::after(Duration::from_secs(60)).await;
},
|me, _, _| {
me.cooldown_handle = None;
@@ -558,7 +558,7 @@ impl AITipModel<crate::terminal::view::ambient_agent::CloudModeTip> {
// Start 60-second cooldown
let handle = ctx.spawn(
async {
warpui::r#async::Timer::after(Duration::from_secs(60)).await;
galaxyui::r#async::Timer::after(Duration::from_secs(60)).await;
},
|me, _, _| {
me.cooldown_handle = None;
@@ -579,7 +579,7 @@ impl AITipModel<crate::terminal::view::ambient_agent::CloudModeTip> {
// Start a new 60-second cooldown
let handle = ctx.spawn(
async {
warpui::r#async::Timer::after(Duration::from_secs(60)).await;
galaxyui::r#async::Timer::after(Duration::from_secs(60)).await;
},
|me, _, _| {
me.cooldown_handle = None;
+23 -23
View File
@@ -48,20 +48,20 @@ use crate::{
view_components::action_button::{ActionButton, PrimaryTheme},
};
use pathfinder_geometry::vector::vec2f;
use warp_core::ui::icons;
use warp_core::ui::icons::ICON_DIMENSIONS;
use warp_core::ui::theme::Fill as ThemeFill;
use warpui::clipboard::ClipboardContent;
use warpui::elements::CrossAxisAlignment;
use warpui::elements::MainAxisAlignment;
use warpui::elements::MainAxisSize;
use warpui::elements::{ChildAnchor, PositionedElementAnchor, PositionedElementOffsetBounds};
use warpui::keymap::EditableBinding;
use warpui::keymap::FixedBinding;
use warpui::text_layout::ClipConfig;
use warpui::ui_components::button::ButtonTooltipPosition;
use warpui::ui_components::components::UiComponent;
use warpui::{
use galaxy_core::ui::icons;
use galaxy_core::ui::icons::ICON_DIMENSIONS;
use galaxy_core::ui::theme::Fill as ThemeFill;
use galaxyui::clipboard::ClipboardContent;
use galaxyui::elements::CrossAxisAlignment;
use galaxyui::elements::MainAxisAlignment;
use galaxyui::elements::MainAxisSize;
use galaxyui::elements::{ChildAnchor, PositionedElementAnchor, PositionedElementOffsetBounds};
use galaxyui::keymap::EditableBinding;
use galaxyui::keymap::FixedBinding;
use galaxyui::text_layout::ClipConfig;
use galaxyui::ui_components::button::ButtonTooltipPosition;
use galaxyui::ui_components::components::UiComponent;
use galaxyui::{
elements::{
ChildView, ConstrainedBox, Container, Flex, Hoverable, MouseStateHandle, OffsetPositioning,
ParentElement, SavePosition, Stack,
@@ -69,7 +69,7 @@ use warpui::{
AppContext, Element, Entity, ModelHandle, SingletonEntity, TypedActionView, View, ViewContext,
ViewHandle,
};
use warpui::{id, EntityId};
use galaxyui::{id, EntityId};
pub fn init(app: &mut AppContext) {
app.register_editable_bindings([EditableBinding::new(
@@ -97,7 +97,7 @@ use crate::util::file::external_editor::settings::EditorLayout;
#[cfg(feature = "local_fs")]
use crate::util::openable_file_type::FileTarget;
#[cfg(feature = "local_fs")]
use warp_util::path::LineAndColumnArg;
use galaxy_util::path::LineAndColumnArg;
// Import keybinding constants from code view to ensure consistency
use crate::code::view::{SAVE_FILE_BINDING_DESCRIPTION, SAVE_FILE_BINDING_NAME};
@@ -641,7 +641,7 @@ impl AIDocumentView {
Container::new(
ConstrainedBox::new(
Icon::RefreshCw04
.to_warpui_icon(ThemeFill::Solid(color))
.to_galaxyui_icon(ThemeFill::Solid(color))
.finish(),
)
.with_width(16.)
@@ -672,7 +672,7 @@ impl AIDocumentView {
Hoverable::new(synced_status_mouse_state, move |state| {
let icon = {
let icon_elem = Icon::RefreshCw04
.to_warpui_icon(ThemeFill::Solid(color))
.to_galaxyui_icon(ThemeFill::Solid(color))
.finish();
ConstrainedBox::new(icon_elem)
.with_width(16.)
@@ -688,8 +688,8 @@ impl AIDocumentView {
tooltip,
OffsetPositioning::offset_from_parent(
vec2f(0., 4.),
warpui::elements::ParentOffsetBounds::WindowByPosition,
warpui::elements::ParentAnchor::BottomRight,
galaxyui::elements::ParentOffsetBounds::WindowByPosition,
galaxyui::elements::ParentAnchor::BottomRight,
ChildAnchor::TopRight,
),
);
@@ -938,7 +938,7 @@ impl AIDocumentView {
}
/// Bind the underlying editor model to the given window, enabling render/event processing.
pub fn bind_window(&self, window_id: warpui::WindowId, ctx: &mut ViewContext<Self>) {
pub fn bind_window(&self, window_id: galaxyui::WindowId, ctx: &mut ViewContext<Self>) {
self.editor.update(ctx, |editor_view, ctx| {
editor_view
.model()
@@ -959,7 +959,7 @@ impl AIDocumentView {
#[cfg(feature = "local_fs")]
fn export(&self, ctx: &mut ViewContext<Self>) {
use crate::drive::export::safe_filename;
use warpui::platform::SaveFilePickerConfiguration;
use galaxyui::platform::SaveFilePickerConfiguration;
let markdown = self.editor.as_ref(ctx).markdown_unescaped(ctx);
// Get the document title from the model
@@ -1015,7 +1015,7 @@ impl View for AIDocumentView {
"AIDocumentView"
}
fn render(&self, _app: &AppContext) -> Box<dyn warpui::Element> {
fn render(&self, _app: &AppContext) -> Box<dyn galaxyui::Element> {
let editor = Container::new(ChildView::new(&self.editor).finish())
.with_padding_left(8.)
.with_padding_right(8.)
@@ -4,7 +4,7 @@
//! any component in the app (e.g., `UpdateEnvironmentForm`) to react to
//! auth state changes without relying on window activation timing.
use warpui::{Entity, ModelContext, SingletonEntity};
use galaxyui::{Entity, ModelContext, SingletonEntity};
/// Events emitted by the GitHub auth notifier.
#[derive(Debug, Clone)]
+3 -3
View File
@@ -27,8 +27,8 @@ use crate::{
};
use futures::channel::oneshot;
use futures::FutureExt;
use warp_graphql::queries::get_scheduled_agent_history::ScheduledAgentHistory;
use warpui::{AppContext, Entity, ModelContext, SingletonEntity};
use galaxy_graphql::queries::get_scheduled_agent_history::ScheduledAgentHistory;
use galaxyui::{AppContext, Entity, ModelContext, SingletonEntity};
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
/// A ScheduledAmbientAgent represents configuration for ambient agents that run on a cron schedule.
@@ -213,7 +213,7 @@ impl ScheduledAgentManager {
&self,
schedule_id: SyncId,
app: &AppContext,
) -> impl warpui::r#async::Spawnable<Output = anyhow::Result<Option<ScheduledAgentHistory>>>
) -> impl galaxyui::r#async::Spawnable<Output = anyhow::Result<Option<ScheduledAgentHistory>>>
{
let ai_client = ServerApiProvider::as_ref(app).get_ai_client();
+3 -3
View File
@@ -117,12 +117,12 @@ pub fn spawn_task(
// We use a timeout to ensure we don't wait indefinitely for session info.
// If no timeout is provided, we use a future that never completes.
let mut timeout_timer = match timeout {
Some(d) => warpui::r#async::Timer::after(d),
None => warpui::r#async::Timer::never(),
Some(d) => galaxyui::r#async::Timer::after(d),
None => galaxyui::r#async::Timer::never(),
}.fuse();
let mut last_state = None;
loop {
let mut poll_timer = warpui::r#async::Timer::after(TASK_STATUS_POLL_INTERVAL).fuse();
let mut poll_timer = galaxyui::r#async::Timer::after(TASK_STATUS_POLL_INTERVAL).fuse();
select! {
_ = timeout_timer => {
+5 -5
View File
@@ -3,17 +3,17 @@
use anyhow::anyhow;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use warp_cli::agent::Harness;
use warp_core::report_error;
use warp_core::ui::theme::WarpTheme;
use warpui::color::ColorU;
use galaxy_cli::agent::Harness;
use galaxy_core::report_error;
use galaxy_core::ui::theme::WarpTheme;
use galaxyui::color::ColorU;
use crate::ai::artifacts::{deserialize_artifacts, Artifact};
use crate::server::server_api::ServerApiProvider;
use crate::ui_components::icons::Icon;
use crate::view_components::DismissibleToast;
use crate::workspace::ToastStack;
use warpui::{SingletonEntity, View, ViewContext};
use galaxyui::{SingletonEntity, View, ViewContext};
use super::AmbientAgentTaskId;
+4 -4
View File
@@ -2,8 +2,8 @@ use crate::server::ids::ServerId;
use serde::Serialize;
use serde_json::{json, Value};
use strum_macros::{EnumDiscriminants, EnumIter};
use warp_core::features::FeatureFlag;
use warp_core::telemetry::{EnablementState, TelemetryEvent, TelemetryEventDesc};
use galaxy_core::features::FeatureFlag;
use galaxy_core::telemetry::{EnablementState, TelemetryEvent, TelemetryEventDesc};
/// The entry point through which Cloud Mode was entered.
#[derive(Clone, Copy, Debug, Serialize)]
@@ -124,7 +124,7 @@ impl TelemetryEvent for CloudAgentTelemetryEvent {
}
fn event_descs() -> impl Iterator<Item = Box<dyn TelemetryEventDesc>> {
warp_core::telemetry::enum_events::<Self>()
galaxy_core::telemetry::enum_events::<Self>()
}
}
@@ -178,4 +178,4 @@ impl TelemetryEventDesc for CloudAgentTelemetryEventDiscriminants {
}
}
warp_core::register_telemetry_event!(CloudAgentTelemetryEvent);
galaxy_core::register_telemetry_event!(CloudAgentTelemetryEvent);
+4 -4
View File
@@ -1,9 +1,9 @@
use std::sync::Arc;
use warp_core::ui::icons::Icon;
use warp_core::ui::theme::AnsiColorIdentifier;
use warpui::elements::{ChildView, Element, Empty, ParentElement, Wrap};
use warpui::{AppContext, Entity, TypedActionView, View, ViewContext, ViewHandle};
use galaxy_core::ui::icons::Icon;
use galaxy_core::ui::theme::AnsiColorIdentifier;
use galaxyui::elements::{ChildView, Element, Empty, ParentElement, Wrap};
use galaxyui::{AppContext, Entity, TypedActionView, View, ViewContext, ViewHandle};
use crate::notebooks::NotebookId;
use crate::terminal::input::MenuPositioning;
+21 -21
View File
@@ -4,11 +4,11 @@ use std::path::PathBuf;
use anyhow::anyhow;
use ui_components::lightbox::{LightboxImage, LightboxImageSource};
use warp_core::report_error;
use galaxy_core::report_error;
use warp_multi_agent_api as api;
#[cfg(feature = "local_fs")]
use warpui::platform::SaveFilePickerConfiguration;
use warpui::SingletonEntity;
use galaxyui::platform::SaveFilePickerConfiguration;
use galaxyui::SingletonEntity;
#[cfg(feature = "local_fs")]
use crate::ai::artifact_download::default_download_filename;
@@ -208,19 +208,19 @@ impl From<api::message::artifact_event::PlanArtifact> for Artifact {
}
}
impl TryFrom<warp_graphql::ai::AIConversationArtifact> for Artifact {
impl TryFrom<galaxy_graphql::ai::AIConversationArtifact> for Artifact {
type Error = ();
fn try_from(value: warp_graphql::ai::AIConversationArtifact) -> Result<Self, Self::Error> {
fn try_from(value: galaxy_graphql::ai::AIConversationArtifact) -> Result<Self, Self::Error> {
match value {
warp_graphql::ai::AIConversationArtifact::PlanArtifact(plan) => Ok(Artifact::Plan {
galaxy_graphql::ai::AIConversationArtifact::PlanArtifact(plan) => Ok(Artifact::Plan {
document_uid: plan.document_uid.into_inner(),
notebook_uid: plan
.notebook_uid
.map(|id| NotebookId::from(id.into_inner())),
title: plan.title,
}),
warp_graphql::ai::AIConversationArtifact::PullRequestArtifact(pr) => {
galaxy_graphql::ai::AIConversationArtifact::PullRequestArtifact(pr) => {
let (repo, number) = parse_github_pr_url(&pr.url).unzip();
Ok(Artifact::PullRequest {
url: pr.url,
@@ -229,14 +229,14 @@ impl TryFrom<warp_graphql::ai::AIConversationArtifact> for Artifact {
number,
})
}
warp_graphql::ai::AIConversationArtifact::ScreenshotArtifact(screenshot) => {
galaxy_graphql::ai::AIConversationArtifact::ScreenshotArtifact(screenshot) => {
Ok(Artifact::Screenshot {
artifact_uid: screenshot.artifact_uid.into_inner(),
mime_type: screenshot.mime_type,
description: screenshot.description,
})
}
warp_graphql::ai::AIConversationArtifact::FileArtifact(file) => Ok(Artifact::File {
galaxy_graphql::ai::AIConversationArtifact::FileArtifact(file) => Ok(Artifact::File {
artifact_uid: file.artifact_uid.into_inner(),
filepath: file.filepath.clone(),
filename: sanitized_basename(&file.filepath).unwrap_or(file.filepath),
@@ -244,7 +244,7 @@ impl TryFrom<warp_graphql::ai::AIConversationArtifact> for Artifact {
description: file.description,
size_bytes: file.size_bytes,
}),
warp_graphql::ai::AIConversationArtifact::Unknown => Err(()),
galaxy_graphql::ai::AIConversationArtifact::Unknown => Err(()),
}
}
}
@@ -296,9 +296,9 @@ pub fn file_button_label(filename: &str, filepath: &str) -> String {
"File".to_string()
}
pub fn open_screenshot_lightbox<V: warpui::View>(
pub fn open_screenshot_lightbox<V: galaxyui::View>(
artifact_uids: &[String],
ctx: &mut warpui::ViewContext<V>,
ctx: &mut galaxyui::ViewContext<V>,
) {
// Open lightbox immediately with Loading placeholders.
let loading_images: Vec<LightboxImage> = artifact_uids
@@ -367,9 +367,9 @@ fn screenshot_lightbox_image_from_download_result(
}
}
pub fn download_file_artifact<V: warpui::View>(
pub fn download_file_artifact<V: galaxyui::View>(
artifact_uid: &str,
ctx: &mut warpui::ViewContext<V>,
ctx: &mut galaxyui::ViewContext<V>,
) {
let ai_client = ServerApiProvider::handle(ctx).as_ref(ctx).get_ai_client();
let artifact_uid = artifact_uid.to_string();
@@ -395,10 +395,10 @@ pub fn download_file_artifact<V: warpui::View>(
);
}
fn open_file_download_result<V: warpui::View>(
fn open_file_download_result<V: galaxyui::View>(
artifact_uid: &str,
artifact: ArtifactDownloadResponse,
ctx: &mut warpui::ViewContext<V>,
ctx: &mut galaxyui::ViewContext<V>,
) {
match artifact {
ArtifactDownloadResponse::File { .. } => {
@@ -419,9 +419,9 @@ fn open_file_download_result<V: warpui::View>(
}
#[cfg(feature = "local_fs")]
fn open_file_download_picker<V: warpui::View>(
fn open_file_download_picker<V: galaxyui::View>(
artifact: ArtifactDownloadResponse,
ctx: &mut warpui::ViewContext<V>,
ctx: &mut galaxyui::ViewContext<V>,
) {
let mut config = SaveFilePickerConfiguration::new()
.with_default_filename(default_download_filename(&artifact));
@@ -430,7 +430,7 @@ fn open_file_download_picker<V: warpui::View>(
}
ctx.open_save_file_picker(
move |path_opt: Option<String>, _me: &mut V, ctx: &mut warpui::ViewContext<V>| {
move |path_opt: Option<String>, _me: &mut V, ctx: &mut galaxyui::ViewContext<V>| {
let Some(path) = path_opt else {
return;
};
@@ -468,10 +468,10 @@ fn open_file_download_picker<V: warpui::View>(
);
}
fn show_file_download_toast<V: warpui::View>(
fn show_file_download_toast<V: galaxyui::View>(
artifact_uid: &str,
toast: DismissibleToast<WorkspaceAction>,
ctx: &mut warpui::ViewContext<V>,
ctx: &mut galaxyui::ViewContext<V>,
) {
let toast_id = format!("artifact_download:{artifact_uid}");
let window_id = ctx.window_id();
+2 -2
View File
@@ -153,8 +153,8 @@ fn default_download_filename_falls_back_to_artifact_uid_with_extension() {
#[test]
fn converts_graphql_file_artifact() {
let artifact = Artifact::try_from(warp_graphql::ai::AIConversationArtifact::FileArtifact(
warp_graphql::ai::FileArtifact {
let artifact = Artifact::try_from(galaxy_graphql::ai::AIConversationArtifact::FileArtifact(
galaxy_graphql::ai::FileArtifact {
artifact_uid: "artifact-file-1".into(),
filepath: "outputs/report.txt".to_string(),
mime_type: "text/plain".to_string(),

Some files were not shown because too many files have changed in this diff Show More