|
| 1 | +# SLIM A2A Java |
| 2 | + |
| 3 | +A2A (Agent-to-Agent) protocol over [SLIM](https://github.com/agntcy/slim) transport for Java. |
| 4 | + |
| 5 | +This library provides an adapter between the [A2A Java SDK](https://github.com/a2aproject/a2a-java) and SLIM's RPC transport, allowing A2A agents to communicate over the SLIM network. |
| 6 | + |
| 7 | +## Project Structure |
| 8 | + |
| 9 | +``` |
| 10 | +slim-a2a-java/ |
| 11 | + buf.yaml / buf.gen.yaml # Protobuf / SlimRPC code generation config |
| 12 | + Taskfile.yaml # Task runner commands |
| 13 | + slim-a2a/ # Library module |
| 14 | + generated/slimrpc/ # Generated SlimRPC stubs (A2AServiceSlimrpc.java) |
| 15 | + src/main/java/ # Adapter classes |
| 16 | + io/agntcy/slim/a2a/ |
| 17 | + SlimA2AHandler.java # Server-side: RequestHandler -> A2AServiceServer |
| 18 | + SlimA2AClient.java # Client-side: domain types over SlimRPC |
| 19 | + SlimHelper.java # SLIM bootstrap helpers |
| 20 | + A2ARpcErrorMapping.java # A2A error <-> RPC error mapping |
| 21 | + examples/echo-agent/ # Echo agent example |
| 22 | + src/main/java/ |
| 23 | + io/agntcy/slim/a2a/examples/echo/ |
| 24 | + EchoAgentExecutor.java # Simple echo AgentExecutor |
| 25 | + ServerMain.java # Server entry point |
| 26 | + ClientMain.java # Client entry point |
| 27 | +``` |
| 28 | + |
| 29 | +## Prerequisites |
| 30 | + |
| 31 | +- Java 21+ |
| 32 | +- Maven 3.9+ |
| 33 | +- A running SLIM gateway (e.g. `slimctl up`) |
| 34 | +- [Buf CLI](https://buf.build/docs/installation) (for regenerating stubs) |
| 35 | +- `protoc-gen-slimrpc-java` on PATH (for regenerating stubs) |
| 36 | + |
| 37 | +## Dependencies |
| 38 | + |
| 39 | +The library depends on: |
| 40 | + |
| 41 | +- `io.agntcy.slim:slim-bindings-java` -- SLIM Java bindings (JNA-based) |
| 42 | +- `org.a2aproject.sdk:a2a-java-sdk-server-common` -- A2A SDK server core |
| 43 | +- `org.a2aproject.sdk:a2a-java-sdk-spec-grpc` -- A2A protobuf types and ProtoUtils mappers |
| 44 | + |
| 45 | +These must be available in your local Maven repository. If they are not published to a remote repository, install them locally first: |
| 46 | + |
| 47 | +```bash |
| 48 | +# Install SLIM Java bindings |
| 49 | +cd /path/to/slim/data-plane/bindings/java |
| 50 | +mvn install -DskipTests |
| 51 | + |
| 52 | +# Install A2A Java SDK |
| 53 | +cd /path/to/a2a-java |
| 54 | +mvn install -DskipTests |
| 55 | +``` |
| 56 | + |
| 57 | +## Building |
| 58 | + |
| 59 | +```bash |
| 60 | +task build |
| 61 | +``` |
| 62 | + |
| 63 | +## Regenerating SlimRPC Stubs |
| 64 | + |
| 65 | +The generated stubs are checked in under `slim-a2a/generated/slimrpc/`. To regenerate: |
| 66 | + |
| 67 | +```bash |
| 68 | +task generate |
| 69 | +``` |
| 70 | + |
| 71 | +This requires `protoc-gen-slimrpc-java` on your PATH. Build it from the SLIM repository: |
| 72 | + |
| 73 | +```bash |
| 74 | +cd /path/to/slim/data-plane |
| 75 | +cargo build --release -p agntcy-protoc-slimrpc-plugin |
| 76 | +# Binary: target/release/protoc-gen-slimrpc-java |
| 77 | +``` |
| 78 | + |
| 79 | +## Running the Echo Agent Example |
| 80 | + |
| 81 | +### 1. Start a SLIM gateway |
| 82 | + |
| 83 | +```bash |
| 84 | +slimctl slim start --endpoint 127.0.0.1:46357 |
| 85 | +``` |
| 86 | + |
| 87 | +### 2. Start the server |
| 88 | + |
| 89 | +In a second terminal: |
| 90 | + |
| 91 | +```bash |
| 92 | +task echo-server |
| 93 | +``` |
| 94 | + |
| 95 | +Wait for `SLIM_A2A_SERVER_READY` to appear. |
| 96 | + |
| 97 | +### 3. Run the client |
| 98 | + |
| 99 | +In a third terminal: |
| 100 | + |
| 101 | +```bash |
| 102 | +task echo-client |
| 103 | +``` |
| 104 | + |
| 105 | +## Architecture |
| 106 | + |
| 107 | +The library follows the same adapter pattern as |
| 108 | +[slim-a2a-go](https://github.com/agntcy/slim-a2a-go), |
| 109 | +[slim-a2a-python](https://github.com/agntcy/slim-a2a-python), and |
| 110 | +[slim-a2a-dotnet](https://github.com/agntcy/slim-a2a-dotnet): |
| 111 | + |
| 112 | +``` |
| 113 | + SLIM Transport |
| 114 | + │ |
| 115 | + ┌────────────┼────────────┐ |
| 116 | + │ slim-a2a-java Library │ |
| 117 | + │ │ │ |
| 118 | + │ ┌─────────┴──────────┐ │ |
| 119 | + │ │ Generated SlimRPC │ │ (A2AServiceSlimrpc.java) |
| 120 | + │ │ stubs (buf gen) │ │ |
| 121 | + │ └─────────┬──────────┘ │ |
| 122 | + │ │ │ |
| 123 | + │ ┌─────────┴──────────┐ │ |
| 124 | + │ │ SlimA2AHandler │ │ Server: adapts RequestHandler -> A2AServiceServer |
| 125 | + │ │ SlimA2AClient │ │ Client: wraps A2AServiceClient with domain types |
| 126 | + │ │ A2ARpcErrorMapping │ │ Error translation |
| 127 | + │ │ SlimHelper │ │ SLIM lifecycle bootstrap |
| 128 | + │ └─────────┬──────────┘ │ |
| 129 | + └────────────┼────────────┘ |
| 130 | + │ |
| 131 | + ┌────────────┼────────────┐ |
| 132 | + │ a2a-java SDK │ |
| 133 | + │ RequestHandler │ |
| 134 | + │ AgentExecutor │ |
| 135 | + │ ProtoUtils (mappers) │ |
| 136 | + │ TaskStore / QueueMgr │ |
| 137 | + └─────────────────────────┘ |
| 138 | +``` |
| 139 | + |
| 140 | +Proto types from `a2a-java-sdk-spec-grpc` are reused on the classpath (split-package approach); no custom proto type generation or converter is needed. |
| 141 | + |
| 142 | +## License |
| 143 | + |
| 144 | +Apache-2.0. See [LICENSE](LICENSE). |
0 commit comments