mirror of
https://github.com/JackChen-me/open-multi-agent.git
synced 2026-10-21 18:42:50 -05:00
* feat(agent): orchestrate external coding agents over ACP (#204) Add an AgentBackend seam so an Agent can run on either the LLM AgentRunner or an external agent. First backend: an ACP client that drives a coding CLI (e.g. Claude Code via its ACP adapter) as a first-class team member — same task DAG, shared memory, cascade, and token budget as LLM agents. - Extract AgentBackend ({ run, stream }) that AgentRunner already implements; Agent.getBackend() branches on AgentConfig.backend. - AcpBackend spawns the agent over stdio JSON-RPC and maps session updates to a RunResult (text, tool calls, usage); handles permissions and abort. - ACP SDK as a lazy optional peer; new /acp subpath export. - docs/external-agents.md, a hybrid-team example, and tests (in-process fake agent + subprocess integration). Experimental: ACP is young; token accounting maps ACP's single context figure and client-side fs proxying is not implemented yet. * fix(agent): harden ACP backend after review (#204) Follow-up fixes on the ACP external-agent backend (PR #360): - Token accounting: usage_update.used is a cumulative context-size gauge, not a per-turn delta. Record each turn's increment so summing across a reused session telescopes to the latest figure instead of double-counting. - systemPrompt: ACP has no system-prompt field, so prepend the agent's systemPrompt to the session's first turn (once). It was previously dropped and only fed coordinator routing. - Abort: when the signal is already aborted before a turn starts, return empty output without prompting (no in-flight turn to cancel). - Startup: clear the cached start() promise on failure so a later run retries instead of re-throwing the same rejection forever. - Permissions: auto-approve now prefers least-privilege allow_once over a session-wide allow_always. Docs (external-agents.md, CLAUDE.md) updated to match. ACP tests 10 to 15; lint + full suite (1135) green.