Description
Let native ACP sidecars launch bundled runtimes directly instead of requiring a Windows wrapper executable.
Keep explicit overrides and mounted manifests first. Before using built-in defaults, discover warp-harness.<harness>.json in absolute PATH directories. Existing bare program names still resolve under usr/local/bin.
Programs and arguments with the explicit ${SIDECAR_ROOT}/ prefix resolve relative to the manifest directory. Other arguments remain literal. Prefixed paths must name files inside the sidecar; traversal and symlink escapes are rejected. The project working directory does not change.
This client support must ship before the manifest-based Windows sidecar in https://github.com/warpdotdev/warp-agent-docker/pull/285. That change and its dependent Codex layers remain in the sidecar repository.
Review focus: discovery precedence and the explicit path-prefix contract. No environment-variable expansion or shell interpolation is added.
Linked Issue
Follow-up to Kevin's launcher review on the sidecar PR linked above.
- The linked issue is labeled
ready-to-specorready-to-implement. No standalone issue is linked. - Where appropriate, screenshots or a short video of the implementation are included below. Not applicable to this non-UI change.
Testing
cargo nextest run -p warp --lib -E 'test(harness::acp::manifest::tests) | test(harness::acp::bridge::tests)' --no-fail-fast: all 20 selected tests passed.- Added a Unix process integration test covering relocated manifest discovery, executable and adapter paths with spaces, literal arguments, project cwd, an initialize exchange, and EOF shutdown through the real ACP bridge. Its isolated local run passed in 0.480 seconds.
cargo clippy -p warp --lib --tests -- -D warnings: passed.- Formatted edited Rust files using the repository's formatter settings; whitespace checks passed.
Native Windows process startup/shutdown and a real bundled Node/Claude adapter remain unverified. The integration fixture uses a local shell-backed runtime, not the production adapter.
- I have manually tested my changes locally with
./script/run. Not run; validation used the targeted process and manifest tests above.
Agent Mode
- Warp Agent Mode - This PR was created via Warp's AI Agent Mode
CHANGELOG-NONE
Conversation: https://staging.warp.dev/conversation/e4833956-23f7-4fb6-befb-215fa0f12193 Plan: https://staging.warp.dev/drive/notebook/STsPbOGDlR63LK2dZM1tzR
Co-Authored-By: Warp agent@warp.dev
Activity
7I'm starting a first review of this pull request.
You can view the conversation on Warp.
I completed the review and no human review was requested for this pull request.
Comment /warp-agent-review on this pull request to retrigger a review (up to 3 times on the same pull request).
Powered by Oz
Overview
This PR adds relocatable native ACP harness manifest support by discovering harness-specific manifests from absolute PATH entries after explicit overrides and mounted sidecars, resolving explicit ${SIDECAR_ROOT}/ paths relative to the selected manifest directory, and preserving the existing bare-program fallback under usr/local/bin. The implementation rejects traversal, absolute-path, missing-file, and symlink-escape cases, and the added unit and Unix bridge coverage exercise discovery precedence, relocation, literal arguments, path validation, working directory behavior, and EOF shutdown.
Concerns
- No blocking concerns found. No approved or repository spec context was available for a spec-drift comparison beyond the attached "No approved or repository spec context" note.
Verdict
Found: 0 critical, 0 important, 0 suggestions
Approve
Comment /warp-agent-review on this pull request to retrigger a review (up to 3 times on the same pull request).
Powered by Oz
@joeywangzr The failed Warp CI run is on this PR's current head. May this factory diagnose the failure, commit fixes, and push to this same branch?
An explicit yes also opts this PR into automatic handling of future CI failures. I won't open a replacement PR or merge. Please reply here with your decision and mention @warp-staging-factory; I won't change code without your consent.
View in factory