Document process monitoring handoff

Add ACP discovery and configuration support
This commit is contained in:
Ryan Ward
2026-07-30 11:53:33 -05:00
parent ad24374f6d
commit 1a0aac51b6
18 changed files with 1280 additions and 664 deletions
@@ -1,387 +1,216 @@
---
name: update-galaxy-with-latest-warp
description: Merge the latest changes from upstream Warp into Galaxy, preserving Galaxy's identity, branding, and AI provider architecture (Bedrock / OpenAI-LiteLLM only). This skill fetches the latest Warp master, merges it in, resolves conflicts in favor of Galaxy's customizations, strips any Warp API/AI/cloud code, and then iteratively repairs the build until `cargo build` succeeds cleanly.
description: Selectively synchronize Galaxy with upstream Warp by updating Rust dependencies and porting eligible terminal, UI, editor, and local core improvements. Do not perform a blanket merge or import Warp API, proprietary AI, cloud auth, telemetry, or billing code.
---
# Update Galaxy with Latest Warp
# Selectively Update Galaxy from Warp
This skill merges the latest upstream Warp changes into Galaxy while preserving everything that makes Galaxy what it is. Galaxy is a fork of Warp that:
Galaxy is a fork of Warp, but it intentionally does not use Warp's proprietary service architecture. The default update strategy is therefore **not** `git merge warp/master`. It is a controlled, selective synchronization focused on code that can run locally in Galaxy.
- Uses **Amazon Bedrock** and/or **OpenAI/LiteLLM** as its AI providers — NEVER Warp's proprietary AI API
- Has its own branding (Galaxy, not Warp) in user-facing surfaces
- Does NOT use Warp's cloud authentication, telemetry, or billing
- Maintains its own deployment pipeline (Hermes)
- Keeps all Galaxy-specific features, settings, and customizations intact
## Non-negotiable exclusions
---
Never import or reintroduce upstream code that depends on:
## Phase 1: Fetch Latest Warp
- Warp's proprietary AI API, agent backend, or hosted orchestration
- Warp authentication, subscriptions, billing, teams, or cloud-only flows
- Warp telemetry or analytics that phone home to Warp
- Warp server GraphQL/API endpoints, unless the change is explicitly adapted to an existing Galaxy service
- Warp-specific deployment, channel, branding, or package identity
- Any change that would replace or bypass Galaxy's Bedrock/OpenAI provider dispatch
The `warp` remote is already configured in this repository pointing to `git@github.com:warpdotdev/warp.git`.
Galaxy's AI provider implementation remains authoritative in:
- `app/src/ai/bedrock/`
- `app/src/ai/openai/`
- `app/src/ai/provider/`
- `app/src/ai/blocklist/controller/response_stream.rs`
## Phase 0: Inspect the working tree
Before changing anything:
```bash
git --no-optional-locks status --short --branch
```
Do not overwrite or reset user changes. If the worktree contains unrelated modifications, keep them intact and make the update in a separate branch or ask the user before proceeding.
## Phase 1: Update Rust dependencies separately
A dependency update is independent from synchronizing upstream source code. Run it from the Galaxy repository root:
```bash
cargo update
```
Then inspect the dependency diff:
```bash
git diff -- Cargo.lock
cargo check --workspace
```
If `cargo update` causes unrelated or excessive churn, do not blindly keep it. Prefer targeted updates for a specific dependency:
```bash
cargo update -p <package>
```
If the lockfile update is useful but a package causes breakage, revert only that package's update or restore the lockfile and update dependencies incrementally. Never use a lockfile regeneration as a substitute for source synchronization.
`cargo update` updates crates.io/git dependency resolution; it does **not** bring terminal or UI source changes from Warp. Those require the selective workflow below.
## Phase 2: Fetch and inventory upstream changes
The `warp` remote may be configured, but fetching is read-only with respect to Galaxy's branches:
```bash
git fetch warp master
git log --oneline -30 warp/master
```
Verify the fetch succeeded and note the latest commit:
Compare upstream with the Galaxy base without merging:
```bash
git log --oneline -1 warp/master
git diff --stat HEAD...warp/master
git diff --name-status HEAD...warp/master
```
---
Classify candidate changes by path and commit. Good candidates generally include:
## Phase 2: Create a Working Branch
- `app/src/terminal/` and terminal model/emulation code, excluding agent/provider integrations
- `crates/galaxy_terminal/` or the corresponding upstream terminal crate
- `crates/galaxyui/`, `crates/galaxyui_core/`, and UI components
- `crates/editor/`, `crates/sum_tree/`, completers, parsers, and local utilities
- Local-only bug fixes and platform behavior fixes
Create a dedicated branch for the merge work:
Reject candidates that touch or depend on:
- Warp AI/server/auth/telemetry/billing modules
- Warp-specific GraphQL/API schema or cloud synchronization
- Galaxy identity, channels, settings, deployment, or Bedrock/OpenAI files
- Broad refactors whose dependency surface cannot be isolated safely
For a candidate commit, inspect before applying it:
```bash
git checkout -b update-from-warp-$(date +%Y%m%d) master
git show --stat --summary <commit>
git show --format=fuller --find-renames <commit> -- <path>
```
This ensures master stays clean until we have a working build.
## Phase 3: Apply only selected changes
---
## Phase 3: Merge Warp into Galaxy
Perform the merge, expecting conflicts:
Create a working branch before porting source changes:
```bash
git merge warp/master --no-commit --no-ff
git switch -c update-from-warp-$(date +%Y%m%d)
```
Using `--no-commit` so we can inspect and fix everything before committing.
Prefer, in order:
---
1. A focused upstream commit with a small, eligible file set:
```bash
git cherry-pick -n <commit>
```
2. A file- or hunk-level patch:
```bash
git diff <base> <commit> -- <eligible-paths> | git apply --3way
```
3. A manual port when Galaxy renamed paths or diverged substantially.
## Phase 4: Resolve Conflicts — Galaxy Always Wins on Identity
Do **not** cherry-pick a commit merely because it includes one useful terminal fix. If a commit mixes terminal code with Warp API/AI/cloud changes, extract only the eligible hunks or manually port the local change.
When resolving merge conflicts, follow these **non-negotiable rules**:
After each selected change:
### 4a. Files Where Galaxy ALWAYS Wins (keep ours)
For these files/patterns, always take Galaxy's version (`--ours`):
- `app/Cargo.toml` — Galaxy's version, package name, binary targets
- `Cargo.lock` — Will be regenerated anyway
- `AGENTS.md` / `CLAUDE.md` — Galaxy's agent instructions
- `.agents/` — Galaxy's skill definitions
- `script/build-and-deploy-hermes*` — Galaxy's deploy pipeline
- `script/install-galaxy.sh` — Galaxy's installer
- `app/channels/` — Galaxy's channel configurations and icons
- Any file under `app/src/ai/bedrock/` — Galaxy's Bedrock provider (keep ours)
- Any file under `app/src/ai/openai/` — Galaxy's OpenAI/LiteLLM provider (keep ours)
- Any file under `app/src/ai/provider/` — Galaxy's provider dispatch (keep ours)
- `app/src/ai/llms.rs` — Galaxy's model registry (keep ours)
- `app/src/settings/ai.rs` — Galaxy's AI settings (keep ours)
- `app/src/ai/blocklist/controller/response_stream.rs` — Galaxy's provider resolution (keep ours)
- Files with Samsung/Galaxy branding customizations
To resolve these in bulk:
```bash
git checkout --ours <file_path>
git add <file_path>
git diff --check
cargo check -p galaxy_terminal
cargo check -p galaxyui
cargo check -p galaxy_editor
```
### 4b. Files Where Warp Wins (take theirs)
Use the actual package name from the relevant `Cargo.toml` if it differs. For changes affecting the application, also run:
For pure infrastructure/terminal/UI improvements that don't touch AI or branding:
- `crates/galaxyui/` (formerly `warpui`) — Take Warp's UI improvements, then rename
- `crates/galaxyui_core/` — Same
- `app/src/terminal/` — Terminal emulation improvements (EXCEPT `app/src/terminal/input/agent.rs`)
- `crates/editor/` — Editor improvements
- `crates/sum_tree/` — Data structure improvements
- Pure algorithm / utility crates
For these:
```bash
git checkout --theirs <file_path>
git add <file_path>
cargo check -p galaxy
```
### 4c. Files That Need Manual Merge
## Path and naming adaptation
These require reading both versions and combining:
Upstream may still use Warp names while Galaxy has renamed crates and paths. Adapt imports to Galaxy's existing names rather than introducing new aliases or reverting Galaxy's naming:
- `app/src/ai/agent/` — Take Warp's agent logic improvements BUT ensure they route through Galaxy's provider dispatch, not Warp's API
- `app/src/ai/blocklist/` — Similar: take improvements but keep Galaxy's provider architecture
- `app/src/workspace/` — Take improvements but keep Galaxy branding
- `app/src/settings_view/` — Take UI improvements but keep Galaxy's AI settings pages
- Root `Cargo.toml` — Merge new dependencies from Warp but keep Galaxy's workspace metadata
- `warpui` → `galaxyui`
- `warpui_core` → `galaxyui_core`
- `warp_core` → `galaxy_core`
- `warp_terminal` → `galaxy_terminal`
- `warp_editor` → `galaxy_editor`
### 4d. Files/Directories to DELETE if Warp Adds Them
Preserve existing Galaxy aliases only where the codebase already requires them. Do not perform a repository-wide rename as part of an update.
If the merge introduces any of these, remove them:
## Dependency policy
- Any Warp-proprietary AI client (e.g. `app/src/ai/warp_api/`, `app/src/ai/warp_server/`)
- Warp authentication modules that phone home to `api.warp.dev`
When a selected upstream change needs a new dependency:
1. Check whether an equivalent dependency already exists in the Galaxy workspace.
2. Add only the smallest required dependency or feature.
3. Confirm it is local/client-side and not a Warp service crate.
4. Run the narrowest affected `cargo check`.
Do not add dependencies for Warp's proprietary APIs, cloud auth, telemetry, billing, or hosted AI.
## AI and service boundary review
Before accepting a patch that touches shared app or agent code, inspect all new imports and calls. It must route AI requests through Galaxy's provider dispatch. Reject or adapt code containing concepts such as:
- `api.warp.dev`, `warp.dev/v1`, Warp AI clients, hosted agent endpoints
- Warp auth tokens or Warp account/session APIs
- Warp telemetry/analytics senders
- Warp billing/subscription code
- Any new GraphQL queries targeting Warp's server for AI (model listing from Warp's API, etc.)
- Warp billing/subscription/team APIs
- Hosted orchestration/Oz dependencies
Useful checks:
```bash
git rm -r <unwanted_path>
grep -RInE 'api\.warp\.dev|warp\.dev/v1|WarpAIService|WarpAiClient|WARP_API_KEY|WARP_AUTH_TOKEN' app/src crates --include='*.rs'
```
### 4e. Naming Fixups After Merge
Existing intentional compatibility names or comments should be reviewed rather than mechanically deleted. New hits introduced by the update must be removed or adapted.
After resolving conflicts, some Warp naming may have leaked in from theirs-wins files. Do a sweep:
## Phase 4: Validation
Run focused checks first, then broader validation as appropriate:
```bash
# Check for Warp API endpoints that should not exist
grep -rn "api\.warp\.dev" app/ crates/ --include="*.rs"
grep -rn "warp\.dev/api" app/ crates/ --include="*.rs"
# Check for Warp AI service calls
grep -rn "WarpAIService\|warp_ai_service\|WarpAiClient" app/ crates/ --include="*.rs"
cargo fmt --all -- --check
git diff --check
cargo check -p galaxy
cargo check -p galaxy_terminal
cargo check -p galaxyui
cargo check -p galaxy_editor
```
Fix any hits — either remove the code or replace with Galaxy equivalents.
---
## Phase 5: Regenerate Cargo.lock
After all conflict resolution:
```bash
cargo generate-lockfile
```
Or if that fails due to errors, just delete and let the build recreate it:
```bash
rm Cargo.lock
cargo metadata --format-version 1 > /dev/null 2>&1 || true
```
---
## Phase 6: Build Repair Loop
This is the critical phase. **Keep iterating until `cargo build` succeeds.**
### Strategy
Run the build and fix errors one category at a time:
```bash
cargo build 2>&1 | head -100
```
### Common Error Categories and Fixes
**1. Missing modules / unresolved imports:**
- Warp may have added new modules. Check if they're AI/cloud related → delete them.
- If they're legitimate (terminal, UI, utilities) → keep them but ensure they compile.
- If they reference renamed crates (`warpui` vs `galaxyui`) → fix the import paths.
**2. Type mismatches in AI code:**
- Warp may have changed AI types/traits. Galaxy's AI architecture takes priority.
- If Warp added new fields to shared types used by both AI and non-AI code, add the fields but make them optional or provide Galaxy-appropriate defaults.
**3. Missing crate features:**
- New Warp code may need features not enabled in Galaxy's `Cargo.toml`.
- Add the features if they're for legitimate crates. Do NOT add features that enable Warp-proprietary functionality.
**4. Renamed/moved items:**
- Warp may have refactored. Follow their refactoring for non-AI code.
- For AI code, keep Galaxy's structure.
**5. New dependencies:**
- If Warp added a new crate to `[workspace.dependencies]`, add it to Galaxy's too (unless it's a Warp-internal crate).
**6. Compilation errors in files we took from Warp:**
- These files may reference things that exist in Warp but not Galaxy.
- Stub out or adapt as needed.
### The Loop
Repeat this cycle until clean:
```
1. cargo build 2>&1 | head -80
2. Identify the FIRST error
3. Fix it
4. Go to 1
```
When individual crate errors are isolated, use targeted checks to speed up:
```bash
cargo check -p <crate_name> 2>&1 | head -50
```
**IMPORTANT**: If you encounter more than 50 errors in a single file that all stem from Warp's AI API being absent, the correct fix is usually to **revert that file to Galaxy's version**:
```bash
git checkout HEAD~1 -- <file_path>
```
Or if the file is new from Warp and entirely AI-API-dependent, just delete it.
---
## Phase 7: Post-Build Verification
Once `cargo build` succeeds:
### 7a. Run clippy
```bash
cargo clippy --workspace --all-targets --all-features --tests -- -D warnings 2>&1 | head -100
```
Fix any warnings. Repeat until clean.
### 7b. Run formatter
For a release-ready update, run the repository-required checks:
```bash
./script/format
cargo clippy --workspace --all-targets --all-features --tests -- -D warnings
cargo build
```
### 7c. Verify no Warp API leaks
If the build fails, fix only errors caused by the selected update. Do not solve incompatibilities by importing excluded Warp service code or weakening Galaxy's provider boundaries.
```bash
grep -rn "api\.warp\.dev" app/src/ crates/ --include="*.rs" | grep -v "// ported from"
grep -rn "warp\.dev/v1" app/src/ crates/ --include="*.rs"
grep -rn "WARP_API_KEY\|WARP_AUTH_TOKEN" app/src/ crates/ --include="*.rs"
```
## Reporting
Any hits must be removed.
Report separately:
### 7d. Verify Galaxy's AI providers still work
- Dependencies updated by `cargo update`, including notable lockfile changes
- Upstream commits or patches selectively ported
- Files and functionality intentionally skipped because they were Warp-specific
- Validation commands run and their results
- Any candidate changes that need a future manual port
Ensure these files are intact and functional:
- `app/src/ai/bedrock/translator.rs` — Bedrock orchestrator
- `app/src/ai/bedrock/client.rs` — AWS SDK client
- `app/src/ai/bedrock/request_translator.rs` — Request builder
- `app/src/ai/bedrock/response_translator.rs` — Response parser
- `app/src/ai/openai/translator.rs` — OpenAI/LiteLLM orchestrator
- `app/src/ai/openai/client.rs` — HTTP client
- `app/src/ai/openai/convert.rs` — Message conversion
- `app/src/ai/openai/response_translator.rs` — SSE parser
- `app/src/ai/provider/mod.rs` — Provider dispatch
- `app/src/ai/provider/types.rs` — Shared types
- `app/src/ai/blocklist/controller/response_stream.rs``resolve_provider_config()`
Do not commit, push, or merge into `master` unless the user explicitly requests it.
### 7e. Quick smoke test
## Recommended fallback
```bash
cargo build --release 2>&1 | tail -5
```
If release build also passes, we're good.
---
## Phase 8: Commit and Report
Once everything is clean:
```bash
git add -A
git commit -m "Merge latest Warp upstream into Galaxy
Merged warp/master ($(git log --oneline -1 warp/master | cut -d' ' -f1)) into Galaxy.
Kept Galaxy's:
- AI provider architecture (Bedrock + OpenAI/LiteLLM)
- Branding and deployment pipeline
- Settings and model configuration
Took from Warp:
- Terminal emulation improvements
- UI framework updates
- Editor and utility improvements
- Bug fixes
Stripped:
- Any Warp API/cloud/auth/telemetry additions"
```
Then inform the user of:
- What was merged
- What conflicts were resolved and how
- What Warp additions were rejected/stripped
- Whether any manual follow-up is needed
Ask the user if they want to merge this branch into master:
```bash
git checkout master
git merge update-from-warp-$(date +%Y%m%d)
git push
```
---
## Critical Invariants — NEVER Violate These
1. **Galaxy's AI MUST only use Bedrock or OpenAI/LiteLLM** — defined in `app/src/ai/bedrock/` and `app/src/ai/openai/`. Warp's AI API/server calls are NEVER acceptable.
2. **Galaxy's version and package name stay as-is**`app/Cargo.toml` keeps `name = "galaxy"` and Galaxy's version number.
3. **Galaxy's binary targets stay as-is**`galaxy-oss`, `galaxy-dev`, `galaxy-preview`, `galaxy-stable`.
4. **No Warp telemetry** — Any analytics/tracking code from Warp gets deleted, not commented out.
5. **No Warp authentication flows** — Galaxy does not phone home to Warp's servers.
6. **Galaxy's deploy pipeline is untouched**`script/build-and-deploy-hermes*` and `script/install-galaxy.sh` are always kept.
7. **The build MUST succeed before this skill is considered complete** — If the build is broken, keep fixing. Do not stop.
---
## Failure Recovery
If the merge becomes unrecoverable (e.g., Warp has done a massive architectural change that breaks everything):
1. Abort the merge:
```bash
git merge --abort
```
2. Or reset the branch:
```bash
git checkout master
git branch -D update-from-warp-$(date +%Y%m%d)
```
3. Inform the user that a manual, selective port is needed instead of a full merge.
4. Suggest using the `bring-warp-feature-over` skill to cherry-pick specific improvements instead.
---
## Reference: Galaxy ↔ Warp Name Mapping
- `warp` (package) → `galaxy`
- `warp_core` → `galaxy_core`
- `warpui` → `galaxyui`
- `warpui_core` → `galaxyui_core`
- `warp_features` → `galaxy_features`
- `warp_completer` → `galaxy_completer`
- `warp_graphql_schema` → `galaxy_graphql_schema`
- `WARP_` env var prefix → `GALAXY_`
- `~/.warp/` → `~/.galaxy-ai/`
- `warp.sqlite` → `galaxy.sqlite`
- Binary names: `warp` → `galaxy-oss` (main), `galaxy-dev`, `galaxy-preview`, `galaxy-stable`
## Reference: Galaxy's AI Architecture
```
Provider dispatch: response_stream.rs → resolve_provider_config() → ProviderConfig enum
↓ Bedrock ↓ OpenAI
bedrock/translator.rs openai/translator.rs
```
- Settings: `ai.bedrock.enabled` (default true), `ai.openai.enabled` (takes priority if true)
- Multi-provider: `ai.providers[]` array with per-provider `base_url`, `api_key`, `models[]`
- Model discovery: OpenAI providers probe `/models` endpoint + `[1m]` variant detection
- Bedrock: Direct AWS SDK calls via `aws-sdk-bedrockruntime`, uses cross-region inference
This architecture is SACRED. Warp's AI changes must never replace or bypass it.
If upstream has accumulated a large architectural delta, stop doing a broad synchronization. Use the `bring-warp-feature-over` skill to identify and migrate individual eligible features. That workflow is safer for Galaxy than attempting to reconcile all of Warp's unrelated service and AI changes at once.