docs: add Phase 5 ACP roadmap + deploy OpenHands agent-server on Dokploy
- Added Phase 5: ACP Harness & Runtime Agnosticism to roadmap - Created docker/docker-compose.agent-server.yml for CT 102 deployment - Updated worker default AGENT_SERVER_URL to internal Docker DNS (http://agent-server:8001) - Worker now runs OpenHands sessions directly on the server, no laptop/Traefik needed
This commit is contained in:
parent
3fc7d01585
commit
4efaf6c0c8
3 changed files with 84 additions and 6 deletions
|
|
@ -38,11 +38,11 @@ const envSchema = z.object({
|
|||
.enum(["minimal", "openhands"])
|
||||
.optional()
|
||||
.default("minimal"),
|
||||
/** OpenHands agent-server URL (local: http://localhost:18000, Cloud: from conversation). */
|
||||
/** OpenHands agent-server URL. Docker: http://agent-server:8001, Local: http://localhost:18000 */
|
||||
AGENT_SERVER_URL: z
|
||||
.string()
|
||||
.optional()
|
||||
.transform((value) => value?.trim() || "http://localhost:18000"),
|
||||
.transform((value) => value?.trim() || "http://agent-server:8001"),
|
||||
/** OpenHands session API key for agent-server auth. */
|
||||
SESSION_API_KEY: z
|
||||
.string()
|
||||
|
|
|
|||
51
docker/docker-compose.agent-server.yml
Normal file
51
docker/docker-compose.agent-server.yml
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# OpenHands Agent Server for Submatter
|
||||
# Deploys on Dokploy (CT 102) alongside the existing stack
|
||||
# Worker connects via internal Docker DNS: http://agent-server:8001
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
agent-server:
|
||||
image: ghcr.io/open-hands/agent-server:0.19.0 # pin to stable version
|
||||
container_name: echodo-agent-server
|
||||
ports:
|
||||
- "8001:8001" # agent-server API
|
||||
environment:
|
||||
# Server config
|
||||
- AGENT_SERVER_HOST=0.0.0.0
|
||||
- AGENT_SERVER_PORT=8001
|
||||
- LOCAL_BACKEND_API_KEY=${LOCAL_BACKEND_API_KEY}
|
||||
# LLM config for the agent-server's own operations
|
||||
- LLM_MODEL=${OMNIROUTE_MODEL:-auto/coding}
|
||||
- LLM_API_KEY=${OMNIROUTE_API_KEY}
|
||||
- LLM_BASE_URL=${OMNIROUTE_BASE_URL}
|
||||
# Sandbox config
|
||||
- SANDBOX_TYPE=docker
|
||||
- SANDBOX_DOCKER_IMAGE=ghcr.io/open-hands/sandbox:latest
|
||||
- SANDBOX_TIMEOUT=300
|
||||
# Workspace persistence
|
||||
- WORKSPACE_BASE=/workspace
|
||||
volumes:
|
||||
- agent-server-workspace:/workspace
|
||||
- /var/run/docker.sock:/var/run/docker.sock # for sandbox containers
|
||||
networks:
|
||||
- echodo-network
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8001/server_info"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 2G
|
||||
cpus: '2'
|
||||
|
||||
volumes:
|
||||
agent-server-workspace:
|
||||
|
||||
networks:
|
||||
echodo-network:
|
||||
external: true
|
||||
|
|
@ -435,15 +435,42 @@ By end of Phase 4:
|
|||
|
||||
---
|
||||
|
||||
## Phase 5: ACP Harness & Runtime Agnosticism (post-v0.1)
|
||||
|
||||
**Goal:** Make submatter runtime-agnostic via Agent Client Protocol (ACP).
|
||||
|
||||
**Why:** ACP is an emerging standard that allows OpenHands, Claude Code, Gemini CLI, and other runtimes to be swapped via a single protocol. This prevents vendor lock-in and lets operators choose the best runtime per task.
|
||||
|
||||
**Tasks:**
|
||||
|
||||
1. Add `HarnessType: "acp"` to shared types
|
||||
2. Create `apps/worker/src/executor/acp-executor.ts` — implements ACP client (connects to any ACP-compatible server)
|
||||
3. Support ACP discovery via `/.well-known/agent.json` (runtime metadata)
|
||||
4. Add `acp` harness type to executor registry
|
||||
5. Support sub-agents via ACP Task Tool Set
|
||||
|
||||
**ACP-compatible runtimes:**
|
||||
- OpenHands (primary)
|
||||
- Claude Code (Anthropic)
|
||||
- Gemini CLI (Google)
|
||||
- Cursor (experimental)
|
||||
- Custom (any ACP server)
|
||||
|
||||
**This is NOT required for v0.1 testing.** Ships after v0.1 ships and proves out.
|
||||
|
||||
---
|
||||
|
||||
## Rollout & Scaling
|
||||
|
||||
Once Phase 4 succeeds:
|
||||
|
||||
1. **Publish to v0.1** — Mark the orchestrator + worker as production-ready for autonomous convoys
|
||||
2. **Scale briefs** — Extend to 5–6 briefs per convoy (architect → implementer → reviewer → ops-copilot → etc.)
|
||||
3. **Scale roles** — Add `role-docs-writer`, `role-security-auditor`, `role-performance-reviewer` as needed
|
||||
4. **Scale models** — Extend omniroute integration to support Claude/OpenAI/Gemini APIs side-by-side
|
||||
5. **Migrate Cursor convoys** — For convoys that have historically run in Cursor, run them via OpenHands instead (backward compat: human-initiated, not automated)
|
||||
2. **Deploy OpenHands Agent Server** — Docker container on Dokploy (CT 102), worker connects via internal Docker DNS
|
||||
3. **Scale briefs** — Extend to 5–6 briefs per convoy (architect → implementer → reviewer → ops-copilot → etc.)
|
||||
4. **Scale roles** — Add `role-docs-writer`, `role-security-auditor`, `role-performance-reviewer` as needed
|
||||
5. **Scale models** — Extend omniroute integration to support Claude/OpenAI/Gemini APIs side-by-side
|
||||
6. **Migrate Cursor convoys** — For convoys that have historically run in Cursor, run them via OpenHands instead (backward compat: human-initiated, not automated)
|
||||
7. **ACP harness** — After v0.1 ships, add ACP support to enable runtime-agnostic agent execution
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue