Skip to content

Release 0.18.0

Choose a tag to compare

@github-actions github-actions released this 25 Sep 19:17
· 416 commits to main since this release

Remote agents: the Streamable HTTP and WebSocket transport from the ACP RFD, contributed by @kamikaz1k (#7), on plain http:// (HTTP/2 over cleartext) and https://, with a new acp-streamable-http-jetty module for the agent side. Plus a choice of Jackson 2 or Jackson 3 (#12), and the fixes found reviewing, interop-testing and load-testing the transport.

Upgrading: three changes need attention

  1. acp-core no longer contains a JSON implementation (#12). If you depend on acp-core alone, add one JSON module; acp-agent-support, acp-test, acp-websocket-jetty and acp-streamable-http-jetty already bring acp-json-jackson2.
    <dependency>
        <groupId>com.agentclientprotocol</groupId>
        <artifactId>acp-json-jackson2</artifactId> <!-- or acp-json-jackson3 -->
        <version>0.18.0</version>
    </dependency>
  2. A second client on an already-connected transport now fails at construction. This fixes the Spring Boot "unicast" failure, where an AcpAsyncClient and an AcpSyncClient bean built from one transport left the second client waiting out its request timeout.
  3. Unknown-field handling moved to the mapper (#10). A JacksonAcpJsonMapper built from a bare new ObjectMapper() is now strict about unknown fields; start from JacksonAcpJsonMapper.defaultObjectMapper() to keep the lenient default.

Highlights

  • Streamable HTTP transport. Client: StreamableHttpAcpClientTransport in acp-core (JDK HttpClient, no new dependency), with SSE stream reconnect and HTTP/2 over cleartext. Agent: StreamableHttpAcpAgentTransport (Jetty 12.1) serves HTTP/SSE and a WebSocket upgrade on one path, one agent per remote connection. StreamableHttpAcpServlet mounts in any Servlet 6 container.
  • JSON modules. acp-json-jackson2 (Jackson 2) and acp-json-jackson3 (Jackson 3.1.5, tools.jackson) write identical bytes on the wire. Mapper selection is deterministic by AcpJsonMapperSupplier.priority(), and the system property acp.json.mapper.supplier overrides it.
  • Single-turn enforcement is per session, not per connection, so many sessions share one HTTP connection.
  • Fixed: the multi-prompt wedge under CPU contention (#14), reported by @krickert. CI now runs the contention tests pinned to one CPU.
  • Deprecated for removal: WebSocketAcpAgentTransport (acp-websocket-jetty). Use acp-streamable-http-jetty, which serves the same WebSocket clients.

Tested

  • 890 tests in the full build.
  • A cross-SDK suite against the TypeScript, Rust and Python SDKs in both directions, plus load scenarios up to 1,000 connections and 5,000 prompts with 0 errors: integration-testing/scripts/run-all.sh, 11/11 passing.

The complete list is in CHANGELOG.md.

Maven Central

com.agentclientprotocol:*:0.18.0: acp-core, acp-json-jackson2, acp-json-jackson3, acp-annotations, acp-agent-support, acp-test, acp-streamable-http-jetty, acp-websocket-jetty (deprecated).

Full Changelog: v0.17.0...v0.18.0