@perkos/perkos-a2a 0.4.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +215 -46
- package/bin/relay.ts +88 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -12
- package/dist/index.js.map +1 -1
- package/dist/relay-client.d.ts +51 -0
- package/dist/relay-client.d.ts.map +1 -0
- package/dist/relay-client.js +222 -0
- package/dist/relay-client.js.map +1 -0
- package/dist/relay.d.ts +49 -0
- package/dist/relay.d.ts.map +1 -0
- package/dist/relay.js +261 -0
- package/dist/relay.js.map +1 -0
- package/dist/server.d.ts +18 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +208 -50
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +38 -1
- package/dist/types.d.ts.map +1 -1
- package/openclaw.plugin.json +53 -4
- package/package.json +9 -3
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @perkos/perkos-a2a
|
|
2
2
|
|
|
3
|
-
Agent-to-Agent (A2A) protocol plugin for [OpenClaw](https://openclaw.ai). Enables multi-agent communication using Google's A2A protocol specification.
|
|
3
|
+
Agent-to-Agent (A2A) protocol plugin for [OpenClaw](https://openclaw.ai). Enables multi-agent communication using Google's A2A protocol specification with enterprise-grade relay infrastructure for NAT traversal.
|
|
4
4
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
@@ -28,6 +28,15 @@ Add to your `openclaw.json`:
|
|
|
28
28
|
"mode": "auto",
|
|
29
29
|
"peers": {
|
|
30
30
|
"other-agent": "http://10.0.0.2:5050"
|
|
31
|
+
},
|
|
32
|
+
"relay": {
|
|
33
|
+
"url": "wss://relay.perkos.xyz",
|
|
34
|
+
"apiKey": "your-agent-api-key",
|
|
35
|
+
"enabled": true
|
|
36
|
+
},
|
|
37
|
+
"auth": {
|
|
38
|
+
"requireApiKey": true,
|
|
39
|
+
"apiKeys": ["key1", "key2"]
|
|
31
40
|
}
|
|
32
41
|
}
|
|
33
42
|
}
|
|
@@ -36,86 +45,246 @@ Add to your `openclaw.json`:
|
|
|
36
45
|
}
|
|
37
46
|
```
|
|
38
47
|
|
|
39
|
-
##
|
|
48
|
+
## Architecture
|
|
49
|
+
|
|
50
|
+
### Relay Hub (NAT Traversal)
|
|
51
|
+
|
|
52
|
+
Agents behind NAT connect outbound to the relay hub via WebSocket. The relay routes messages between agents, queues messages for offline agents, and maintains a presence registry.
|
|
53
|
+
|
|
54
|
+
```mermaid
|
|
55
|
+
graph TB
|
|
56
|
+
subgraph "A2A Relay Hub (Cloud VPS)"
|
|
57
|
+
RH[WebSocket Broker]
|
|
58
|
+
MQ[Message Queue]
|
|
59
|
+
REG[Agent Registry]
|
|
60
|
+
AUTH[API Key Auth]
|
|
61
|
+
RL[Rate Limiter]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
subgraph "Agent A (Behind NAT)"
|
|
65
|
+
OC_A[OpenClaw Gateway] --> P_A[perkos-a2a plugin]
|
|
66
|
+
P_A --> RC_A[Relay Client]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
subgraph "Agent B (VPS)"
|
|
70
|
+
OC_B[OpenClaw Gateway] --> P_B[perkos-a2a plugin]
|
|
71
|
+
P_B --> S_B[HTTP Server :5050]
|
|
72
|
+
P_B --> RC_B[Relay Client]
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
subgraph "Agent C (Behind NAT)"
|
|
76
|
+
OC_C[OpenClaw Gateway] --> P_C[perkos-a2a plugin]
|
|
77
|
+
P_C --> RC_C[Relay Client]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
RC_A <-->|WSS| RH
|
|
81
|
+
RC_B <-->|WSS| RH
|
|
82
|
+
RC_C <-->|WSS| RH
|
|
83
|
+
RC_B <-->|Direct HTTP| S_B
|
|
84
|
+
|
|
85
|
+
style RH fill:#1d1029,stroke:#eb1b69,color:#fff
|
|
86
|
+
style MQ fill:#45193c,stroke:#eb1b69,color:#fff
|
|
87
|
+
style REG fill:#45193c,stroke:#eb1b69,color:#fff
|
|
88
|
+
style AUTH fill:#45193c,stroke:#eb1b69,color:#fff
|
|
89
|
+
style RL fill:#45193c,stroke:#eb1b69,color:#fff
|
|
90
|
+
style OC_A fill:#1d1029,stroke:#eb1b69,color:#fff
|
|
91
|
+
style OC_B fill:#1d1029,stroke:#eb1b69,color:#fff
|
|
92
|
+
style OC_C fill:#1d1029,stroke:#eb1b69,color:#fff
|
|
93
|
+
style P_A fill:#8e2051,stroke:#eb1b69,color:#fff
|
|
94
|
+
style P_B fill:#8e2051,stroke:#eb1b69,color:#fff
|
|
95
|
+
style P_C fill:#8e2051,stroke:#eb1b69,color:#fff
|
|
96
|
+
```
|
|
40
97
|
|
|
41
|
-
###
|
|
98
|
+
### Direct Peer-to-Peer
|
|
99
|
+
|
|
100
|
+
Agents on the same network or with public IPs can communicate directly via HTTP without a relay.
|
|
101
|
+
|
|
102
|
+
```mermaid
|
|
103
|
+
graph TB
|
|
104
|
+
subgraph "Agent A (VPS)"
|
|
105
|
+
OC_A[OpenClaw Gateway] --> P_A[perkos-a2a plugin]
|
|
106
|
+
P_A --> S_A[A2A Server :5050]
|
|
107
|
+
P_A --> C_A[A2A Client]
|
|
108
|
+
S_A --> AC_A["/.well-known/agent-card.json"]
|
|
109
|
+
S_A --> RPC_A["/a2a/jsonrpc"]
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
subgraph "Agent B (VPS)"
|
|
113
|
+
OC_B[OpenClaw Gateway] --> P_B[perkos-a2a plugin]
|
|
114
|
+
P_B --> S_B[A2A Server :5050]
|
|
115
|
+
P_B --> C_B[A2A Client]
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
C_A <-->|JSON-RPC 2.0| S_B
|
|
119
|
+
C_B <-->|JSON-RPC 2.0| S_A
|
|
120
|
+
|
|
121
|
+
style OC_A fill:#1d1029,stroke:#eb1b69,color:#fff
|
|
122
|
+
style OC_B fill:#1d1029,stroke:#eb1b69,color:#fff
|
|
123
|
+
style P_A fill:#8e2051,stroke:#eb1b69,color:#fff
|
|
124
|
+
style P_B fill:#8e2051,stroke:#eb1b69,color:#fff
|
|
125
|
+
style S_A fill:#76437b,stroke:#eb1b69,color:#fff
|
|
126
|
+
style S_B fill:#76437b,stroke:#eb1b69,color:#fff
|
|
127
|
+
style C_A fill:#45193c,stroke:#eb1b69,color:#fff
|
|
128
|
+
style C_B fill:#45193c,stroke:#eb1b69,color:#fff
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Task Lifecycle
|
|
132
|
+
|
|
133
|
+
```mermaid
|
|
134
|
+
sequenceDiagram
|
|
135
|
+
participant Agent A
|
|
136
|
+
participant Relay Hub
|
|
137
|
+
participant Agent B
|
|
138
|
+
|
|
139
|
+
Note over Agent A,Agent B: Via Relay (NAT traversal)
|
|
140
|
+
Agent A->>Relay Hub: WSS: task message (to: Agent B)
|
|
141
|
+
Relay Hub->>Agent B: WSS: forward task
|
|
142
|
+
Agent B->>Agent B: Process task + inject into session
|
|
143
|
+
Agent B->>Relay Hub: WSS: task response
|
|
144
|
+
Relay Hub->>Agent A: WSS: forward response
|
|
145
|
+
|
|
146
|
+
Note over Agent A,Agent B: Via Direct HTTP
|
|
147
|
+
Agent A->>Agent B: POST /a2a/jsonrpc (message/send)
|
|
148
|
+
Agent B->>Agent B: Process task + inject into session
|
|
149
|
+
Agent B-->>Agent A: JSON-RPC response
|
|
150
|
+
```
|
|
42
151
|
|
|
43
|
-
|
|
152
|
+
## Running the Relay Hub
|
|
153
|
+
|
|
154
|
+
The relay hub is a lightweight WebSocket broker. Deploy it on any VPS with a public IP.
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
# Via npx (development)
|
|
158
|
+
npx tsx bin/relay.ts --port 6060 --api-keys key1,key2
|
|
159
|
+
|
|
160
|
+
# Via environment variables
|
|
161
|
+
RELAY_PORT=6060 RELAY_API_KEYS=key1,key2 npx tsx bin/relay.ts
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Relay Hub Options
|
|
165
|
+
|
|
166
|
+
| Option | Env Var | Default | Description |
|
|
167
|
+
|---|---|---|---|
|
|
168
|
+
| `--port` | `RELAY_PORT` | 6060 | WebSocket listen port |
|
|
169
|
+
| `--api-keys` | `RELAY_API_KEYS` | (none) | Comma-separated accepted API keys |
|
|
170
|
+
| `--max-queue` | `RELAY_MAX_QUEUE` | 200 | Max queued messages per offline agent |
|
|
171
|
+
| `--rate-limit` | `RELAY_RATE_LIMIT` | 60 | Max messages per agent per minute |
|
|
172
|
+
|
|
173
|
+
## Modes
|
|
174
|
+
|
|
175
|
+
| Mode | HTTP Server | Relay Client | Use Case |
|
|
176
|
+
|---|---|---|---|
|
|
177
|
+
| `auto` | Conditional | If configured | Detects NAT, chooses best option |
|
|
178
|
+
| `full` | Yes | If configured | VPS with public IP |
|
|
179
|
+
| `client-only` | No | If configured | Behind NAT, no local server |
|
|
180
|
+
| `relay` | No | No | Run as relay hub only |
|
|
181
|
+
|
|
182
|
+
## Configuration
|
|
44
183
|
|
|
45
184
|
```json
|
|
46
|
-
|
|
47
|
-
"
|
|
185
|
+
{
|
|
186
|
+
"agentName": "my-agent",
|
|
187
|
+
"port": 5050,
|
|
188
|
+
"mode": "auto",
|
|
189
|
+
"skills": [],
|
|
190
|
+
"peers": {
|
|
191
|
+
"other-agent": "http://10.0.0.2:5050"
|
|
192
|
+
},
|
|
193
|
+
"relay": {
|
|
194
|
+
"url": "wss://relay.perkos.xyz",
|
|
195
|
+
"apiKey": "agent-specific-key",
|
|
196
|
+
"enabled": true
|
|
197
|
+
},
|
|
198
|
+
"auth": {
|
|
199
|
+
"requireApiKey": true,
|
|
200
|
+
"apiKeys": ["key1", "key2"]
|
|
201
|
+
}
|
|
48
202
|
}
|
|
49
203
|
```
|
|
50
204
|
|
|
51
|
-
|
|
205
|
+
| Option | Type | Default | Description |
|
|
206
|
+
|---|---|---|---|
|
|
207
|
+
| `agentName` | string | `"agent"` | This agent's name in the council |
|
|
208
|
+
| `port` | number | `5050` | HTTP server port |
|
|
209
|
+
| `mode` | string | `"auto"` | Operating mode (see table above) |
|
|
210
|
+
| `skills` | array | `[]` | Skills exposed via A2A |
|
|
211
|
+
| `peers` | object | `{}` | Direct peer URLs |
|
|
212
|
+
| `relay.url` | string | - | Relay hub WebSocket URL |
|
|
213
|
+
| `relay.apiKey` | string | - | API key for relay authentication |
|
|
214
|
+
| `relay.enabled` | boolean | `false` | Enable relay connectivity |
|
|
215
|
+
| `auth.requireApiKey` | boolean | `false` | Require API key for inbound HTTP |
|
|
216
|
+
| `auth.apiKeys` | string[] | `[]` | Accepted API keys for inbound HTTP |
|
|
217
|
+
|
|
218
|
+
## Authentication
|
|
219
|
+
|
|
220
|
+
### Relay Auth
|
|
221
|
+
|
|
222
|
+
Agents authenticate with the relay hub using an API key provided during WebSocket registration. The relay rejects connections with invalid keys.
|
|
223
|
+
|
|
224
|
+
### HTTP Auth
|
|
52
225
|
|
|
53
|
-
|
|
226
|
+
When `auth.requireApiKey` is enabled, inbound HTTP requests must include an API key via:
|
|
227
|
+
- `X-API-Key` header
|
|
228
|
+
- `Authorization: Bearer <key>` header
|
|
229
|
+
- `?apiKey=<key>` query parameter
|
|
54
230
|
|
|
55
|
-
|
|
56
|
-
1. Install Tailscale: https://tailscale.com
|
|
57
|
-
2. Both agents join the same tailnet
|
|
58
|
-
3. Use Tailscale IPs for peers:
|
|
59
|
-
```json
|
|
60
|
-
"peers": { "agent-b": "http://100.64.0.2:5050" }
|
|
61
|
-
```
|
|
231
|
+
## Session Injection
|
|
62
232
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
233
|
+
When a task is received, the plugin attempts to inject it directly into the agent's OpenClaw session using the plugin API (`api.injectMessage`). If session injection is not available, tasks fall back to writing markdown files to the workspace.
|
|
234
|
+
|
|
235
|
+
## Agent Tools
|
|
236
|
+
|
|
237
|
+
When the plugin is active, three tools are available to the agent:
|
|
66
238
|
|
|
67
|
-
|
|
68
|
-
|
|
239
|
+
- `perkos_a2a_discover` -- Discover all configured peer agents and their capabilities (direct + relay)
|
|
240
|
+
- `perkos_a2a_send` -- Send a task to a named peer agent (tries direct HTTP, falls back to relay)
|
|
241
|
+
- `perkos_a2a_status` -- Check the status of a previously sent task
|
|
69
242
|
|
|
70
243
|
## CLI Commands
|
|
71
244
|
|
|
72
245
|
```bash
|
|
73
246
|
openclaw perkos-a2a setup # Detect environment and show recommendations
|
|
74
|
-
openclaw perkos-a2a status # Show agent status and config
|
|
75
|
-
openclaw perkos-a2a discover # Discover peer agents
|
|
247
|
+
openclaw perkos-a2a status # Show agent status, relay connection, and config
|
|
248
|
+
openclaw perkos-a2a discover # Discover peer agents (direct + relay)
|
|
76
249
|
openclaw perkos-a2a send <target> <message> # Send a task to a peer
|
|
77
250
|
```
|
|
78
251
|
|
|
79
|
-
##
|
|
252
|
+
## Networking Guide
|
|
80
253
|
|
|
81
|
-
|
|
82
|
-
|-------------|----------|----------|------------------------------------------------|
|
|
83
|
-
| `agentName` | string | "agent" | This agent's name in the council |
|
|
84
|
-
| `port` | number | 5050 | HTTP server port (avoid 5000 on macOS/AirPlay) |
|
|
85
|
-
| `mode` | string | "auto" | `full`, `client-only`, or `auto` (detect) |
|
|
86
|
-
| `skills` | array | [] | Skills this agent exposes via A2A |
|
|
87
|
-
| `peers` | object | {} | Map of peer names to A2A base URLs |
|
|
254
|
+
### Option 1: Relay Hub (Recommended for NAT)
|
|
88
255
|
|
|
89
|
-
|
|
256
|
+
Deploy the relay hub on a VPS, configure all agents to connect to it. No port forwarding or tunnels needed.
|
|
90
257
|
|
|
91
|
-
|
|
92
|
-
- **full**: Always starts the HTTP server. Fails loudly if port is in use.
|
|
93
|
-
- **client-only**: No HTTP server. Can send tasks and discover peers but cannot receive inbound tasks.
|
|
258
|
+
### Option 2: Direct (Public IP / Same Network)
|
|
94
259
|
|
|
95
|
-
|
|
260
|
+
Agents with public IPs or on the same network can communicate directly via HTTP. Configure peer URLs in the `peers` config.
|
|
96
261
|
|
|
97
|
-
|
|
262
|
+
### Option 3: Tailscale
|
|
98
263
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
264
|
+
Both agents join the same tailnet. Use Tailscale IPs for peer URLs.
|
|
265
|
+
|
|
266
|
+
### Option 4: Client-Only
|
|
267
|
+
|
|
268
|
+
Set `"mode": "client-only"` to only send tasks (not receive). Combine with relay for full bidirectional support.
|
|
102
269
|
|
|
103
270
|
## Troubleshooting
|
|
104
271
|
|
|
272
|
+
**Relay connection failing:**
|
|
273
|
+
- Verify the relay URL is correct and reachable
|
|
274
|
+
- Check that your API key matches one configured on the relay hub
|
|
275
|
+
- Look for `[perkos-a2a]` log messages for connection errors
|
|
276
|
+
|
|
105
277
|
**Port 5050 in use:**
|
|
106
278
|
Change the port in config, or run `lsof -i :5050` to find the conflicting process.
|
|
107
279
|
|
|
108
|
-
**Port 5000 on macOS:**
|
|
109
|
-
macOS Monterey+ uses port 5000 for AirPlay Receiver. Use 5050 (the default) instead.
|
|
110
|
-
|
|
111
280
|
**Peers show offline:**
|
|
112
281
|
- Verify the peer URL is correct and reachable
|
|
113
282
|
- Check firewalls/security groups
|
|
114
|
-
- If
|
|
283
|
+
- If using relay, verify both agents are connected to the same relay hub
|
|
115
284
|
|
|
116
|
-
**
|
|
117
|
-
-
|
|
118
|
-
-
|
|
285
|
+
**Auth errors (401):**
|
|
286
|
+
- Ensure your API key is in the target agent's `auth.apiKeys` list
|
|
287
|
+
- Check `X-API-Key` header is being sent correctly
|
|
119
288
|
|
|
120
289
|
## License
|
|
121
290
|
|
package/bin/relay.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Standalone A2A Relay Hub
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* npx tsx bin/relay.ts [--port 6060] [--api-keys key1,key2]
|
|
7
|
+
*
|
|
8
|
+
* Environment variables:
|
|
9
|
+
* RELAY_PORT - WebSocket port (default: 6060)
|
|
10
|
+
* RELAY_API_KEYS - Comma-separated list of accepted API keys
|
|
11
|
+
* RELAY_MAX_QUEUE - Max queued messages per offline agent (default: 200)
|
|
12
|
+
* RELAY_RATE_LIMIT - Max messages per agent per minute (default: 60)
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { RelayHub } from "../src/relay.js";
|
|
16
|
+
import type { RelayHubConfig } from "../src/relay.js";
|
|
17
|
+
|
|
18
|
+
function parseArgs(): Partial<RelayHubConfig> {
|
|
19
|
+
const args = process.argv.slice(2);
|
|
20
|
+
const config: Partial<RelayHubConfig> = {};
|
|
21
|
+
|
|
22
|
+
for (let i = 0; i < args.length; i++) {
|
|
23
|
+
switch (args[i]) {
|
|
24
|
+
case "--port":
|
|
25
|
+
case "-p":
|
|
26
|
+
config.port = parseInt(args[++i], 10);
|
|
27
|
+
break;
|
|
28
|
+
case "--api-keys":
|
|
29
|
+
config.apiKeys = args[++i].split(",").map((k) => k.trim()).filter(Boolean);
|
|
30
|
+
break;
|
|
31
|
+
case "--max-queue":
|
|
32
|
+
config.maxQueuePerAgent = parseInt(args[++i], 10);
|
|
33
|
+
break;
|
|
34
|
+
case "--rate-limit":
|
|
35
|
+
config.rateLimitPerMinute = parseInt(args[++i], 10);
|
|
36
|
+
break;
|
|
37
|
+
case "--help":
|
|
38
|
+
case "-h":
|
|
39
|
+
console.log("A2A Relay Hub");
|
|
40
|
+
console.log("");
|
|
41
|
+
console.log("Options:");
|
|
42
|
+
console.log(" --port, -p <port> WebSocket port (default: 6060)");
|
|
43
|
+
console.log(" --api-keys <k1,k2,...> Accepted API keys (default: none, auth disabled)");
|
|
44
|
+
console.log(" --max-queue <n> Max queued messages per offline agent (default: 200)");
|
|
45
|
+
console.log(" --rate-limit <n> Max messages per agent per minute (default: 60)");
|
|
46
|
+
console.log("");
|
|
47
|
+
console.log("Environment variables:");
|
|
48
|
+
console.log(" RELAY_PORT, RELAY_API_KEYS, RELAY_MAX_QUEUE, RELAY_RATE_LIMIT");
|
|
49
|
+
process.exit(0);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Environment variable overrides
|
|
54
|
+
if (!config.port && process.env.RELAY_PORT) {
|
|
55
|
+
config.port = parseInt(process.env.RELAY_PORT, 10);
|
|
56
|
+
}
|
|
57
|
+
if (!config.apiKeys && process.env.RELAY_API_KEYS) {
|
|
58
|
+
config.apiKeys = process.env.RELAY_API_KEYS.split(",").map((k) => k.trim()).filter(Boolean);
|
|
59
|
+
}
|
|
60
|
+
if (!config.maxQueuePerAgent && process.env.RELAY_MAX_QUEUE) {
|
|
61
|
+
config.maxQueuePerAgent = parseInt(process.env.RELAY_MAX_QUEUE, 10);
|
|
62
|
+
}
|
|
63
|
+
if (!config.rateLimitPerMinute && process.env.RELAY_RATE_LIMIT) {
|
|
64
|
+
config.rateLimitPerMinute = parseInt(process.env.RELAY_RATE_LIMIT, 10);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return config;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const config = parseArgs();
|
|
71
|
+
const hub = new RelayHub(config);
|
|
72
|
+
|
|
73
|
+
hub.start();
|
|
74
|
+
|
|
75
|
+
console.log("[perkos-a2a] Relay hub running");
|
|
76
|
+
console.log(`[perkos-a2a] Port: ${config.port || 6060}`);
|
|
77
|
+
console.log(`[perkos-a2a] Auth: ${config.apiKeys?.length ? "enabled" : "disabled (no API keys configured)"}`);
|
|
78
|
+
|
|
79
|
+
process.on("SIGINT", () => {
|
|
80
|
+
console.log("\n[perkos-a2a] Shutting down relay hub...");
|
|
81
|
+
hub.stop();
|
|
82
|
+
process.exit(0);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
process.on("SIGTERM", () => {
|
|
86
|
+
hub.stop();
|
|
87
|
+
process.exit(0);
|
|
88
|
+
});
|
package/dist/index.d.ts
CHANGED
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Agent-to-Agent (A2A) protocol communication plugin.
|
|
5
5
|
* Adds tools for agents to discover peers, send tasks, and check task status.
|
|
6
|
-
*
|
|
6
|
+
* Supports direct HTTP, relay-based NAT traversal, and session injection.
|
|
7
7
|
*/
|
|
8
8
|
export { A2AServer, detectNetworking } from "./server.js";
|
|
9
|
+
export { RelayHub } from "./relay.js";
|
|
10
|
+
export { RelayClient } from "./relay-client.js";
|
|
9
11
|
export * from "./types.js";
|
|
10
12
|
export default function register(api: any): void;
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,cAAc,YAAY,CAAC;AAE3B,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,cAAc,YAAY,CAAC;AAE3B,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,GAAG,QA8VxC"}
|
package/dist/index.js
CHANGED
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Agent-to-Agent (A2A) protocol communication plugin.
|
|
5
5
|
* Adds tools for agents to discover peers, send tasks, and check task status.
|
|
6
|
-
*
|
|
6
|
+
* Supports direct HTTP, relay-based NAT traversal, and session injection.
|
|
7
7
|
*/
|
|
8
8
|
import { A2AServer, detectNetworking } from "./server.js";
|
|
9
9
|
export { A2AServer, detectNetworking } from "./server.js";
|
|
10
|
+
export { RelayHub } from "./relay.js";
|
|
11
|
+
export { RelayClient } from "./relay-client.js";
|
|
10
12
|
export * from "./types.js";
|
|
11
13
|
export default function register(api) {
|
|
12
14
|
const pluginConfig = api.config?.plugins?.entries?.["perkos-a2a"]?.config || {
|
|
@@ -17,6 +19,22 @@ export default function register(api) {
|
|
|
17
19
|
};
|
|
18
20
|
const logger = api.logger || console;
|
|
19
21
|
const server = new A2AServer(pluginConfig, logger);
|
|
22
|
+
// Wire up session injection if the plugin API supports it
|
|
23
|
+
if (typeof api.injectMessage === "function") {
|
|
24
|
+
server.setMessageInjector((text, metadata) => {
|
|
25
|
+
api.injectMessage(text, metadata);
|
|
26
|
+
});
|
|
27
|
+
logger.info("[perkos-a2a] Session injection enabled");
|
|
28
|
+
}
|
|
29
|
+
else if (typeof api.sendMessage === "function") {
|
|
30
|
+
server.setMessageInjector((text, metadata) => {
|
|
31
|
+
api.sendMessage({ text, metadata });
|
|
32
|
+
});
|
|
33
|
+
logger.info("[perkos-a2a] Session injection enabled (sendMessage)");
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
logger.info("[perkos-a2a] Session injection not available, tasks will be written to files");
|
|
37
|
+
}
|
|
20
38
|
// Start A2A server as background service
|
|
21
39
|
api.registerService({
|
|
22
40
|
id: "perkos-a2a",
|
|
@@ -30,7 +48,7 @@ export default function register(api) {
|
|
|
30
48
|
});
|
|
31
49
|
// Tool: Send a task to a peer agent
|
|
32
50
|
api.registerTool({
|
|
33
|
-
name: "
|
|
51
|
+
name: "perkos_a2a_send",
|
|
34
52
|
description: "Send a task to another agent in the council via A2A protocol. " +
|
|
35
53
|
"Use this to delegate work to a peer agent.",
|
|
36
54
|
parameters: {
|
|
@@ -84,7 +102,7 @@ export default function register(api) {
|
|
|
84
102
|
});
|
|
85
103
|
// Tool: Discover peer agents
|
|
86
104
|
api.registerTool({
|
|
87
|
-
name: "
|
|
105
|
+
name: "perkos_a2a_discover",
|
|
88
106
|
description: "Discover all peer agents in the council and their capabilities. " +
|
|
89
107
|
"Returns each agent's status, name, description, and skills.",
|
|
90
108
|
parameters: {
|
|
@@ -123,7 +141,7 @@ export default function register(api) {
|
|
|
123
141
|
});
|
|
124
142
|
// Tool: Get task status
|
|
125
143
|
api.registerTool({
|
|
126
|
-
name: "
|
|
144
|
+
name: "perkos_a2a_status",
|
|
127
145
|
description: "Get the status of a previously sent A2A task by its ID.",
|
|
128
146
|
parameters: {
|
|
129
147
|
type: "object",
|
|
@@ -134,7 +152,7 @@ export default function register(api) {
|
|
|
134
152
|
},
|
|
135
153
|
taskId: {
|
|
136
154
|
type: "string",
|
|
137
|
-
description: "The task ID returned from
|
|
155
|
+
description: "The task ID returned from perkos_a2a_send",
|
|
138
156
|
},
|
|
139
157
|
},
|
|
140
158
|
required: ["target", "taskId"],
|
|
@@ -149,9 +167,14 @@ export default function register(api) {
|
|
|
149
167
|
};
|
|
150
168
|
}
|
|
151
169
|
try {
|
|
170
|
+
const headers = { "Content-Type": "application/json" };
|
|
171
|
+
const peerAuth = pluginConfig.peerAuth?.[params.target];
|
|
172
|
+
if (peerAuth) {
|
|
173
|
+
headers["x-api-key"] = peerAuth;
|
|
174
|
+
}
|
|
152
175
|
const response = await fetch(`${targetUrl}/a2a/jsonrpc`, {
|
|
153
176
|
method: "POST",
|
|
154
|
-
headers
|
|
177
|
+
headers,
|
|
155
178
|
body: JSON.stringify({
|
|
156
179
|
jsonrpc: "2.0",
|
|
157
180
|
method: "tasks/get",
|
|
@@ -195,15 +218,17 @@ export default function register(api) {
|
|
|
195
218
|
},
|
|
196
219
|
});
|
|
197
220
|
// Gateway RPC method
|
|
198
|
-
api.registerGatewayMethod("a2a.status", ({ respond }) => {
|
|
221
|
+
api.registerGatewayMethod("perkos-a2a.status", ({ respond }) => {
|
|
199
222
|
respond(true, {
|
|
200
223
|
agent: pluginConfig.agentName,
|
|
201
224
|
port: pluginConfig.port,
|
|
202
225
|
mode: pluginConfig.mode || "auto",
|
|
203
226
|
clientOnly: server.isClientOnly(),
|
|
227
|
+
relayConnected: server.isRelayConnected(),
|
|
228
|
+
relayUrl: pluginConfig.relay?.url || null,
|
|
204
229
|
peers: Object.keys(pluginConfig.peers),
|
|
205
230
|
protocol: "a2a",
|
|
206
|
-
version: "0.
|
|
231
|
+
version: "0.5.1",
|
|
207
232
|
});
|
|
208
233
|
});
|
|
209
234
|
// CLI command
|
|
@@ -217,6 +242,9 @@ export default function register(api) {
|
|
|
217
242
|
console.log(`Port: ${pluginConfig.port}`);
|
|
218
243
|
console.log(`Mode: ${pluginConfig.mode || "auto"}`);
|
|
219
244
|
console.log(`Client-only: ${server.isClientOnly()}`);
|
|
245
|
+
console.log(`Relay connected: ${server.isRelayConnected()}`);
|
|
246
|
+
console.log(`Relay URL: ${pluginConfig.relay?.url || "(not configured)"}`);
|
|
247
|
+
console.log(`Auth required: ${pluginConfig.auth?.requireApiKey || false}`);
|
|
220
248
|
console.log(`Peers: ${Object.keys(pluginConfig.peers).join(", ") || "(none)"}`);
|
|
221
249
|
});
|
|
222
250
|
cmd
|
|
@@ -271,20 +299,30 @@ export default function register(api) {
|
|
|
271
299
|
// ignore
|
|
272
300
|
}
|
|
273
301
|
console.log(`Port ${pluginConfig.port}: ${portAvailable ? "available" : "IN USE"}`);
|
|
302
|
+
// Relay status
|
|
303
|
+
console.log(`\nRelay: ${pluginConfig.relay?.enabled ? "enabled" : "disabled"}`);
|
|
304
|
+
if (pluginConfig.relay?.url) {
|
|
305
|
+
console.log(`Relay URL: ${pluginConfig.relay.url}`);
|
|
306
|
+
}
|
|
307
|
+
console.log(`Auth: ${pluginConfig.auth?.requireApiKey ? "enabled" : "disabled"}`);
|
|
274
308
|
console.log("\n--- Recommendations ---\n");
|
|
275
309
|
if (!net.isBehindNat) {
|
|
276
|
-
console.log("You
|
|
310
|
+
console.log("You have a public IP. Configure peers with your public IP.");
|
|
277
311
|
console.log(` Your A2A URL: http://${net.publicIp}:${pluginConfig.port}/a2a/jsonrpc`);
|
|
278
312
|
}
|
|
313
|
+
else if (pluginConfig.relay?.enabled) {
|
|
314
|
+
console.log("You are behind NAT but relay is configured. Bidirectional communication via relay.");
|
|
315
|
+
}
|
|
279
316
|
else if (net.hasTailscale && net.tailscaleIp) {
|
|
280
317
|
console.log("Use your Tailscale IP for peers.");
|
|
281
318
|
console.log(` Your A2A URL: http://${net.tailscaleIp}:${pluginConfig.port}/a2a/jsonrpc`);
|
|
282
319
|
}
|
|
283
320
|
else {
|
|
284
321
|
console.log("You are behind NAT. Options:");
|
|
285
|
-
console.log(" 1)
|
|
286
|
-
console.log(" 2)
|
|
287
|
-
console.log(
|
|
322
|
+
console.log(" 1) Configure a relay hub (recommended) - set relay.url and relay.enabled in config");
|
|
323
|
+
console.log(" 2) Install Tailscale - https://tailscale.com");
|
|
324
|
+
console.log(" 3) Set up a Cloudflare Tunnel");
|
|
325
|
+
console.log(' 4) Client-only mode (can send but not receive) - set mode: "client-only"');
|
|
288
326
|
}
|
|
289
327
|
if (!portAvailable) {
|
|
290
328
|
console.log(`\nWarning: Port ${pluginConfig.port} is in use. Change the port in your config or stop the conflicting service.`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|