4 Commits

Author SHA1 Message Date
Moira Huang
d775c92265 Install bundled skills globally on remote hosts and push daemon-parsed catalogs (#12378)
## Description

Ships bundled skills to remote hosts as a single **global, version-independent resources install**, with the daemon parsing skills against its own filesystem and pushing the catalog to clients.

**Install** (`install_remote_server.sh`, `setup.rs`): the binary install stays exactly as before (flat, version-suffixed path, `--version` check). The installer additionally moves the artifact's `resources/` tree to `{install_dir}/bundled_resources` — a global location deliberately decoupled from the binary version: the last install wins, and slight skew against an older running daemon is accepted (it parsed its skills at startup). A tarball without resources is non-fatal. The binary `find` excludes the `resources/` tree so bundled-skill companion files named `oz-*` can never be mistaken for the executable.

**Daemon** (`server_model.rs`): at startup, parses and handlebars-renders the skills under `bundled_resources` against its own paths (`{{skill_dir}}`, `{{settings_schema_path}}`), then pushes the pre-parsed catalog as a `BundledSkillsSnapshot` notification — broadcast on parse completion and sent to each connection right after its `Initialize`. The handshake is never blocked, and no resources path is advertised in `InitializeResponse` anymore. `RequiresFile` activations are evaluated daemon-side; `RequiresMcp` ships as a wire hint the client evaluates. Parsing is deliberately not feature-flag gated: exposure is controlled on the client, where the connecting user's flag state actually lives.

**Client** (`manager.rs`, `remote.rs`, `skill_manager.rs`): the snapshot flows `ClientEvent` → `RemoteServerManagerEvent::BundledSkillsSnapshot { host_id, skills }`. `SkillManager` re-parses the daemon-rendered content, wraps paths as `RemotePath`s, and stores one catalog per connected host in `BundledSkills` (`HostDisconnected` tears it down; a fresh snapshot after reconnect replaces it wholesale). Skill selection is now host-aware: SSH sessions see the remote daemon's catalog — never the local client's — and local sessions see only the local one. Remote bundled skills resolve by path with activation re-checked at invocation.

<img width="2210" height="247" alt="Screenshot 2026-06-12 at 2 31 49 PM" src="https://github.com/user-attachments/assets/045be408-47b3-42c3-8878-83d7f6589fb3" />

## Linked Issue

- [ ] The linked issue is labeled `ready-to-spec` or `ready-to-implement`.
- [ ] Where appropriate, screenshots or a short video of the implementation are included below (especially for user-visible or UI changes).

## Testing

- Install-script integration tests cover the global resources install, last-install-wins replacement, the resources-less tarball path, the `oz-*` decoy exclusion, and removal leaving `bundled_resources` intact.
- Proto round-trip and client push-event tests for `BundledSkillsSnapshot`; daemon broadcast tests (no-op before parse, reaches all connections after).
- Conversion tests for daemon→proto serialization (activation handling) and proto→catalog (host-scoped paths, unknown-integration and invalid-path skipping).
- `SkillManager` tests for host-aware catalog selection (remote cwd → remote catalog only) and path-based resolution of remote bundled skills.
- `cargo nextest run -p remote_server` and targeted `-p warp` suites pass; `./script/format` and Clippy clean.
- [ ] I have manually tested my changes locally with `./script/run`

## Agent Mode

- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

CHANGELOG-NONE

Co-Authored-By: Oz <oz-agent@warp.dev>
2026-06-12 16:03:48 -07:00
Moira Huang
3b2cb79a53 [APP-3792] remote codebase indexing: client remote indexing + search codebase tool gating (#10697)
## Description
Implement root hash usage + client remote indexing + `SearchCodebase`
tool gating, per specs: https://github.com/warpdotdev/warp/pull/9508

## Testing
Locally tested remotely using codebase indexing with the feature flag on
- [x] I have manually tested my changes locally with `./script/run`

### Screenshots / Videos
<img width="1177" height="853" alt="Screenshot 2026-05-11 at 3 21 59 PM"
src="https://github.com/user-attachments/assets/771f0a93-d60c-4a9b-9e44-eb82d3b1984d"
/>
<img width="1009" height="657" alt="image"
src="https://github.com/user-attachments/assets/8577fdb7-58cf-4bc6-bc49-a498dad89fa6"
/>

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

---------

Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-13 18:51:34 +00:00
Moira Huang
9fa9771f29 [Remote codebase indexing] wire up daemon indexing / drop indexing (#10685)
## Description
Wire daemon side indexing per
https://github.com/warpdotdev/warp/pull/9508. I'm gating the
`LaunchMode::RemoteServerDaemon` bit of logic behind a feature flag so
we don't think we have codebase indexing remotely while I finish out the
implementation.

I also moved some status stuff from the PR above this in the stack down
to here just to even out the number of lines per PR, even though it's
not strictly relevant for this PR

## Testing
Ran this w the branch on top of this to see if indexing works when
indexing requests are actually kicked off
<img width="1177" height="853" alt="Screenshot 2026-05-11 at 3 21 59 PM"
src="https://github.com/user-attachments/assets/951bae4a-f504-480e-9e1f-075b3c1e1b9f"
/>
<img width="1009" height="657" alt="image"
src="https://github.com/user-attachments/assets/eefc6f21-77f8-4b18-bdd7-35ae35aa2b7f"
/>

- [x] I have manually tested my changes locally with `./script/run`

### Screenshots / Videos
<!-- Attach screenshots or a short video demonstrating the change, where
appropriate. Remove this section if it is not relevant to your PR. -->

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode
2026-05-12 21:56:03 +00:00
David Stern
0dbd3d567a Initial public release of Warp.
Repo-Sync-Origin: warpdotdev/warp-internal@12af1d983b
2026-04-28 08:43:33 -05:00