feat: expand Galaxy agent and remote tooling
Add Wormhole remote helpers, provider and agent improvements, filesystem diagnostics, model metadata support, and schema-aware settings IntelliSense.
This commit is contained in:
@@ -29,7 +29,7 @@ When an AI agent runs in an SSH session, the `ApplyFileDiffs` tool is disabled b
|
||||
|
||||
**CodeDiffView save/delete/create**: `DiffSessionType` already exists with `Local` and `Remote(HostId)` variants. `set_candidate_diffs` routes to `register_file` (local) or `register_remote_file` (remote). `FileModel` has `FileBackend::Remote` that dispatches save/delete through `RemoteServerClient`. However, `RequestFileEditsExecutor` never sets `diff_session_type` — it defaults to `Local`.
|
||||
|
||||
**Agent tool gating**: `get_supported_tools` excludes `ApplyFileDiffs`, `ReadFiles`, and `SearchCodebase` when `session_type` is `WarpifiedRemote`. There is no field on `SessionContext` to indicate whether a `RemoteServerClient` is available.
|
||||
**Agent tool gating**: `get_supported_tools` excludes `ApplyFileDiffs`, `ReadFiles`, and `SearchCodebase` when `session_type` is `WormholedRemote`. There is no field on `SessionContext` to indicate whether a `RemoteServerClient` is available.
|
||||
|
||||
**Post-accept context**: After diffs are accepted, `execute` re-reads files from disk via `read_local_file_context` and sends updated content to the LLM. This would require a network round-trip for remote sessions.
|
||||
|
||||
@@ -146,7 +146,7 @@ Session type is modeled as two distinct enums to separate immutable bootstrap-ti
|
||||
```rust
|
||||
pub enum BootstrapSessionType {
|
||||
Local,
|
||||
WarpifiedRemote,
|
||||
WormholedRemote,
|
||||
}
|
||||
```
|
||||
|
||||
@@ -155,7 +155,7 @@ pub enum BootstrapSessionType {
|
||||
```rust
|
||||
pub enum SessionType {
|
||||
Local,
|
||||
WarpifiedRemote { host_id: Option<HostId> },
|
||||
WormholedRemote { host_id: Option<HostId> },
|
||||
}
|
||||
```
|
||||
|
||||
@@ -176,10 +176,10 @@ match session_context.session_type() {
|
||||
api::ToolType::SearchCodebase,
|
||||
]);
|
||||
}
|
||||
Some(SessionType::WarpifiedRemote { host_id: Some(_) }) => {
|
||||
Some(SessionType::WormholedRemote { host_id: Some(_) }) => {
|
||||
supported_tools.push(api::ToolType::ApplyFileDiffs);
|
||||
}
|
||||
Some(SessionType::WarpifiedRemote { host_id: None }) => {
|
||||
Some(SessionType::WormholedRemote { host_id: None }) => {
|
||||
// Feature flag off or not yet connected — no remote tools.
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Problem
|
||||
|
||||
The `ReadFiles` agent tool is disabled for remote SSH sessions. `get_supported_tools` skips `ToolType::ReadFiles` when `SessionType::WarpifiedRemote`, because the underlying `read_local_file_context` reads files via `async_fs`, `FileModel::read_text_file`, and local image processing — all local-only APIs.
|
||||
The `ReadFiles` agent tool is disabled for remote SSH sessions. `get_supported_tools` skips `ToolType::ReadFiles` when `SessionType::WormholedRemote`, because the underlying `read_local_file_context` reads files via `async_fs`, `FileModel::read_text_file`, and local image processing — all local-only APIs.
|
||||
|
||||
The remote server already runs on the host machine with full filesystem access and has access to the same dependencies (`warp_files`, `warp_util`, `mime_guess`). Rather than building a degraded client-side approximation, we push the file-reading logic to the server so the ReadFiles tool has full feature parity with local: line-range extraction, binary/image support, metadata, and size limits.
|
||||
|
||||
@@ -36,7 +36,7 @@ The remote server already runs on the host machine with full filesystem access a
|
||||
|
||||
**Current `ReadFile` proto** (`remote_server.proto`): `ReadFile { path }` → `ReadFileSuccess { content, exists }`. The server handler just calls `tokio::fs::read_to_string` — no metadata, no line ranges, no size limits, no binary support.
|
||||
|
||||
**Tool gating**: `get_supported_tools` excludes `ReadFiles` for `WarpifiedRemote` sessions. `get_supported_cli_agent_tools` also excludes it.
|
||||
**Tool gating**: `get_supported_tools` excludes `ReadFiles` for `WormholedRemote` sessions. `get_supported_cli_agent_tools` also excludes it.
|
||||
|
||||
## Proposed Changes
|
||||
|
||||
@@ -135,8 +135,8 @@ Follows the same pattern as `write_file` / `delete_file` — sends request, awai
|
||||
In the `execute` method, after resolving cwd/shell, check `active_session.session_type(ctx)`:
|
||||
|
||||
- **Local / None**: call `read_local_file_context` as today (unchanged).
|
||||
- **WarpifiedRemote with host_id**: resolve `RemoteServerClient` via `RemoteServerManager::client_for_host`, call `client.read_file_context(...)`, convert `ReadFileContextResponse` → `ReadFileContextResult` (mapping proto `FileContextProto` → `FileContext`, `FailedFileRead` → `missing_files`).
|
||||
- **WarpifiedRemote without host_id**: fall through to the local `read_local_file_context` path.
|
||||
- **WormholedRemote with host_id**: resolve `RemoteServerClient` via `RemoteServerManager::client_for_host`, call `client.read_file_context(...)`, convert `ReadFileContextResponse` → `ReadFileContextResult` (mapping proto `FileContextProto` → `FileContext`, `FailedFileRead` → `missing_files`).
|
||||
- **WormholedRemote without host_id**: fall through to the local `read_local_file_context` path.
|
||||
|
||||
The remote client lookup uses a unified code path with no `cfg` gating — `RemoteServerManager` and `RemoteServerClient` compile on all targets including WASM. On WASM, `client_for_host` returns `None` (since `connect_session` is a no-op), so the local path is used automatically.
|
||||
|
||||
@@ -146,7 +146,7 @@ The `read_remote_file` adapter currently uses the old `ReadFile`/`ReadFileSucces
|
||||
|
||||
### 7. Enable `ReadFiles` in `get_supported_tools` for remote sessions
|
||||
|
||||
In `get_supported_tools` (impl.rs:179), add `api::ToolType::ReadFiles` alongside `ApplyFileDiffs` for the `WarpifiedRemote { host_id: Some(_) }` arm.
|
||||
In `get_supported_tools` (impl.rs:179), add `api::ToolType::ReadFiles` alongside `ApplyFileDiffs` for the `WormholedRemote { host_id: Some(_) }` arm.
|
||||
|
||||
Also in `get_supported_cli_agent_tools` (impl.rs:234), enable `ReadFiles` for remote sessions with a connected host.
|
||||
|
||||
@@ -161,7 +161,7 @@ sequenceDiagram
|
||||
participant Shared as read_single_file_context
|
||||
|
||||
LLM->>Executor: ReadFiles action (file locations)
|
||||
Note over Executor: session_type is WarpifiedRemote with host_id
|
||||
Note over Executor: session_type is WormholedRemote with host_id
|
||||
|
||||
Executor->>Client: read_file_context(files, max_bytes)
|
||||
Client->>Server: ReadFileContextRequest { files, max_file_bytes, max_batch_bytes }
|
||||
|
||||
Reference in New Issue
Block a user