feat: add ACP agent server with CLI, tool bridge, and registry manifest#669
Closed
pabl-o-ce wants to merge 6 commits intoNousResearch:mainfrom
Closed
feat: add ACP agent server with CLI, tool bridge, and registry manifest#669pabl-o-ce wants to merge 6 commits intoNousResearch:mainfrom
pabl-o-ce wants to merge 6 commits intoNousResearch:mainfrom
Conversation
Remove unused run_agent import, make mcp_servers Optional in new_session/load_session, fix set_config_option value type to str, and correct ext_method/ext_notification param and return types. Author: Pablo Carrera <pabloce@poscye.com>
- Add `hermes acp` subcommand and `hermes-acp` entry point - Wire acp_adapter and acp dependency in pyproject.toml - Add ACP tool bridge delegation in AIAgent for editor tool routing - Add acp_registry/ with agent.json manifest and icon Author: Pablo Carrera <pabloce@poscye.com>
Add list_sessions, fork_session, resume_session stubs; enable unstable protocol so set_session_model and new session methods are routable; fix load_session param order, return types, ext_* signatures, and set_config_option value default; add repository/license to agent.json and improve auth error messaging. Author: Pablo Carrera <pabloce@poscye.com>
The step_cb was defined with (step_info: dict) but called with (api_call_count: int, prev_tools: list), causing a silent TypeError every iteration. The response text was read from result["response"] but run_conversation returns it as result["final_response"], so responses never reached the editor. Also adds shutdown/cleanup lifecycle, session capability declarations, and tool bridge timeout handling. Author: Pablo Carrera <pabloce@poscye.com>
Rewrite agent.json for registry validation (name field, remove extras/auth, fix schema URL), add hermes-agent acp CLI routing, fix resume_session to reject unknown sessions, update cwd on session reload, and pass cwd on prompt auto-create. Author: Pablo Carrera <pabloce@poscye.com>
Contributor
|
Thanks for the contribution! We've since implemented a more complete ACP integration in PR #837, which includes modular architecture (server, session, events, tools, permissions, auth modules), full test coverage (41 tests), tool kind mapping, permission bridging to editor dialogs, reasoning/thinking streaming, and more. Closing in favor of #837. Appreciate you pushing for ACP support — it helped validate the direction! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
hermes acpsubcommand andhermes-acpentry point to launch an ACP JSON-RPC stdio serverHermesACPAgentwith full ACP lifecycle: initialize, authenticate, session management (new/load/list/fork/resume),prompt execution, and cancellation
acpdependency and[acp]extra inpyproject.tomlToolBridgeto delegate editor tool calls (file edits, terminal, etc.) back through the ACP client connectionsession_updatenotificationsacp_registry/withagent.jsonmanifest and SVG icon for ACP Registry submissionTest plan
pip install -e ".[acp]"installs without errors andacpextra pulls in theacpdependencyhermes acpstarts the ACP JSON-RPC stdio server without crashinghermes-acpentry point also launches the serverpython -c "from acp_adapter.server import HermesACPAgent"imports cleanlyprotocol_version,agent_info, andsession_capabilities(list, fork, resume)new_sessioncreates a session and returns a validsession_idlist_sessionsreturns previously created sessionsload_session/resume_sessionre-attach to an existing sessionpromptwith a text block runs the agent and streams the response text back viasession_updatestart_tool_callsession updates with tool name and statusstep_cb(api_call_count: int, prev_tools: list)matchesAIAgentcall signature and executes without errorresult["final_response"](not"response")cancelsets the cancel event, callsagent.interrupt(), and prompt returnsstop_reason="cancelled"ToolBridgedelegates editor tool calls back to the ACP client viarun_coroutine_threadsafeToolBridge._run()raises a descriptiveRuntimeErroron 120s timeout instead of rawTimeoutErrorThreadPoolExecutoracp_registry/agent.jsonis valid against the ACP registry schemaacp_registry/icon.svgexists and is a valid SVG