a2acalling 0.6.61 → 0.6.63
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/.a2a-manifest.json +70 -0
- package/.claude/a2a-skill-reference.md +462 -0
- package/.claude/commands/a2a-app.md +42 -0
- package/.claude/commands/a2a-call.md +26 -0
- package/.claude/commands/a2a-contacts.md +31 -0
- package/.claude/commands/a2a-conversations.md +47 -0
- package/.claude/commands/a2a-gui.md +30 -0
- package/.claude/commands/a2a-invite.md +63 -0
- package/.claude/commands/a2a-setup.md +30 -0
- package/.claude/commands/a2a-skills.md +27 -0
- package/.claude/commands/a2a-status.md +46 -0
- package/.claude/commands/a2a-uninstall.md +36 -0
- package/.claude/commands/a2a-update.md +41 -0
- package/ARCHITECTURE.md +3 -1
- package/package.json +1 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.6.63",
|
|
3
|
+
"installed_at": "2026-02-21T06:11:14.272Z",
|
|
4
|
+
"files": [
|
|
5
|
+
{
|
|
6
|
+
"path": "CLAUDE.md",
|
|
7
|
+
"action": "skipped"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"path": ".claude/a2a-skill-reference.md",
|
|
11
|
+
"action": "skipped"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"path": ".claude/commands/a2a-call.md",
|
|
15
|
+
"action": "skipped"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"path": ".claude/commands/a2a-invite.md",
|
|
19
|
+
"action": "skipped"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"path": ".claude/commands/a2a-contacts.md",
|
|
23
|
+
"action": "skipped"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"path": ".claude/commands/a2a-status.md",
|
|
27
|
+
"action": "skipped"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"path": ".claude/commands/a2a-setup.md",
|
|
31
|
+
"action": "skipped"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"path": ".claude/commands/a2a-update.md",
|
|
35
|
+
"action": "skipped"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"path": ".claude/commands/a2a-uninstall.md",
|
|
39
|
+
"action": "skipped"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"path": ".claude/commands/a2a-app.md",
|
|
43
|
+
"action": "skipped"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"path": ".claude/commands/a2a-conversations.md",
|
|
47
|
+
"action": "skipped"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"path": ".claude/commands/a2a-gui.md",
|
|
51
|
+
"action": "skipped"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"path": ".claude/commands/a2a-skills.md",
|
|
55
|
+
"action": "skipped"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"path": ".codex/AGENTS.md",
|
|
59
|
+
"action": "skipped"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"path": ".a2a-manifest.json",
|
|
63
|
+
"action": "created"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"path": ".a2a-install.log",
|
|
67
|
+
"action": "created"
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
}
|
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: a2a
|
|
3
|
+
description: "Agent-to-agent A2A for OpenClaw. Create tokens to let remote agents call yours as a subagent with scoped permissions. Use when setting up cross-instance agent communication, creating A2A tokens, managing remote agent access, or calling other OpenClaw agents."
|
|
4
|
+
metadata:
|
|
5
|
+
{
|
|
6
|
+
"openclaw":
|
|
7
|
+
{
|
|
8
|
+
"emoji": "🤝",
|
|
9
|
+
"requires": { "bins": ["node"] },
|
|
10
|
+
"install":
|
|
11
|
+
[
|
|
12
|
+
{
|
|
13
|
+
"id": "npm",
|
|
14
|
+
"kind": "node",
|
|
15
|
+
"package": "a2acalling",
|
|
16
|
+
"bins": ["a2a"],
|
|
17
|
+
"label": "Install A2A Calling (npm)",
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
"routes": "/api/a2a",
|
|
21
|
+
"tools": ["a2a_call"],
|
|
22
|
+
},
|
|
23
|
+
}
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# A2A
|
|
27
|
+
|
|
28
|
+
Enable agent-to-agent communication across OpenClaw instances.
|
|
29
|
+
|
|
30
|
+
## AFTER INSTALL — START HERE
|
|
31
|
+
|
|
32
|
+
**Just installed `a2acalling`? Here's what to do next:**
|
|
33
|
+
|
|
34
|
+
1. **Run onboarding** (required first step — starts server, configures what your agent shares):
|
|
35
|
+
```bash
|
|
36
|
+
a2a quickstart
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
2. **Create an invite** to share with other agents:
|
|
40
|
+
```bash
|
|
41
|
+
a2a create --name "YourAgent" --tier public --expires 7d
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
3. **Add a contact and call them**:
|
|
45
|
+
```bash
|
|
46
|
+
a2a add "a2a://host/fed_xxx" "AgentName"
|
|
47
|
+
a2a call "AgentName" "Hello!"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Native macOS App
|
|
51
|
+
|
|
52
|
+
On macOS, a native Callbook desktop app is available:
|
|
53
|
+
```bash
|
|
54
|
+
a2a app install # Downloads from GitHub releases
|
|
55
|
+
```
|
|
56
|
+
After install, the app lives at `~/Applications/A2A Callbook.app`. Use `a2a app status` to check installation and `a2a app uninstall` to remove it.
|
|
57
|
+
|
|
58
|
+
### Full CLI Reference
|
|
59
|
+
|
|
60
|
+
**Onboarding & Setup:**
|
|
61
|
+
| Command | Description |
|
|
62
|
+
|---------|-------------|
|
|
63
|
+
| `a2a quickstart` | First-time setup — port, hostname, disclosure topics |
|
|
64
|
+
| `a2a quickstart --force` | Re-run onboarding from scratch |
|
|
65
|
+
| `a2a quickstart --hostname DOMAIN:443 --port 3001` | Setup with public hostname |
|
|
66
|
+
| `a2a setup` | Auto setup (gateway-aware dashboard install) |
|
|
67
|
+
| `a2a version` | Show installed version |
|
|
68
|
+
|
|
69
|
+
**Tokens & Invites:**
|
|
70
|
+
| Command | Description |
|
|
71
|
+
|---------|-------------|
|
|
72
|
+
| `a2a create --name NAME --tier TIER --expires DURATION` | Create invite token |
|
|
73
|
+
| `a2a list` | List active tokens |
|
|
74
|
+
| `a2a revoke <id>` | Revoke a token |
|
|
75
|
+
|
|
76
|
+
Token options: `--name/-n`, `--tier/-p` (public/friends/family), `--expires/-e` (1h/1d/7d/30d/never), `--disclosure/-d` (public/minimal/none), `--notify` (all/summary/none)
|
|
77
|
+
|
|
78
|
+
**Contacts & Calling:**
|
|
79
|
+
| Command | Description |
|
|
80
|
+
|---------|-------------|
|
|
81
|
+
| `a2a add <url> [name]` | Add contact from invite URL |
|
|
82
|
+
| `a2a contacts` | List all contacts |
|
|
83
|
+
| `a2a call <contact> <msg>` | Multi-turn call (8-25 turns) |
|
|
84
|
+
| `a2a call <contact> <msg> --single` | One-shot call |
|
|
85
|
+
| `a2a ping <url>` | Check if agent is reachable |
|
|
86
|
+
|
|
87
|
+
**Dashboard & GUI:**
|
|
88
|
+
| Command | Description |
|
|
89
|
+
|---------|-------------|
|
|
90
|
+
| `a2a gui` | Open dashboard in browser |
|
|
91
|
+
| `a2a gui --tab logs` | Open specific tab (contacts/calls/logs/settings/invites) |
|
|
92
|
+
|
|
93
|
+
**Server Management:**
|
|
94
|
+
| Command | Description |
|
|
95
|
+
|---------|-------------|
|
|
96
|
+
| `a2a server --port 3001` | Start server manually |
|
|
97
|
+
| `a2a update` | Update to latest version |
|
|
98
|
+
| `a2a update --check` | Check for updates without installing |
|
|
99
|
+
| `a2a uninstall` | Stop server and remove config |
|
|
100
|
+
| `a2a skills` | Install Claude Code + Codex skill files |
|
|
101
|
+
|
|
102
|
+
**Native App (macOS only):**
|
|
103
|
+
| Command | Description |
|
|
104
|
+
|---------|-------------|
|
|
105
|
+
| `a2a app status` | Check native app installation |
|
|
106
|
+
| `a2a app install` | Install/update from GitHub releases |
|
|
107
|
+
| `a2a app install --force` | Reinstall even if current |
|
|
108
|
+
| `a2a app uninstall` | Remove from ~/Applications |
|
|
109
|
+
|
|
110
|
+
### Claude Code Slash Commands
|
|
111
|
+
|
|
112
|
+
These are available after install:
|
|
113
|
+
- `/a2a-setup` — Run onboarding or reset configuration
|
|
114
|
+
- `/a2a-call <contact> <message>` — Call another A2A agent
|
|
115
|
+
- `/a2a-invite [name] [--tier]` — Create and share an invite token
|
|
116
|
+
- `/a2a-contacts` — List and manage contacts
|
|
117
|
+
- `/a2a-status` — Check server and agent health
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Install & Onboarding
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
npm install -g a2acalling
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Onboarding is automatic. The first time you run any `a2a` command after install, the app detects that setup is incomplete and runs the full onboarding flow inline — port configuration, server start, and a disclosure prompt that tells you which workspace files to scan and how to submit tiered topics.
|
|
128
|
+
|
|
129
|
+
To manually trigger onboarding (or re-run it):
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
a2a quickstart # run onboarding
|
|
133
|
+
a2a quickstart --force # re-run from scratch
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
After the onboarding walkthrough prints, scan ALL available context to build the disclosure JSON:
|
|
137
|
+
|
|
138
|
+
**Primary sources:**
|
|
139
|
+
- USER.md, SOUL.md — owner identity, interests, values
|
|
140
|
+
- memory/*.md — may contain relevant context
|
|
141
|
+
|
|
142
|
+
**If workspace files are missing/empty, also scan:**
|
|
143
|
+
- ~/.gitconfig — name, email hints
|
|
144
|
+
- Environment: whoami, hostname, $USER
|
|
145
|
+
- ~/.config/ — installed tools reveal work domain
|
|
146
|
+
- Installed CLIs — infer developer/devops/data roles
|
|
147
|
+
- System hostname — may indicate project or role
|
|
148
|
+
|
|
149
|
+
Build disclosure tiers from whatever context exists, then submit:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
a2a quickstart --submit '<json>'
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Network Ingress (Internet-Facing Invites)
|
|
156
|
+
|
|
157
|
+
- A2A does not bundle an auto-tunneling service for internet-facing ingress.
|
|
158
|
+
- For stable internet-facing invites, set `A2A_HOSTNAME` to your public endpoint (domain or public IP).
|
|
159
|
+
- Recommended: run the A2A backend on an internal port and expose it via a reverse proxy on `:443` (HTTPS) or `:80` (HTTP), routing `/api/a2a/*` to the backend.
|
|
160
|
+
- `npx a2acalling setup` inspects port 80 and prints reverse proxy guidance + an external reachability check.
|
|
161
|
+
|
|
162
|
+
## Publishing (Maintainers)
|
|
163
|
+
|
|
164
|
+
This repo ships as:
|
|
165
|
+
- GitHub repo: `onthegonow/a2a_calling`
|
|
166
|
+
- npm package: `a2acalling`
|
|
167
|
+
|
|
168
|
+
Maintainer credentials are local-only and must never be committed:
|
|
169
|
+
- `.env` (gitignored) must contain `GH_TOKEN` and `NPM_TOKEN`
|
|
170
|
+
- GitHub Actions repo secrets should also include `GH_TOKEN` and `NPM_TOKEN` for automated releases
|
|
171
|
+
|
|
172
|
+
## Commands
|
|
173
|
+
|
|
174
|
+
### Quickstart
|
|
175
|
+
|
|
176
|
+
User says: `/a2a quickstart`, `/a2a start`, "set up A2A", "get started with A2A", "configure what my agent shares"
|
|
177
|
+
|
|
178
|
+
Deterministic onboarding flow (sequential, flags-based):
|
|
179
|
+
|
|
180
|
+
1. Background bootstrap (config + disclosure)
|
|
181
|
+
2. Owner dashboard access (local URL + optional Callbook Remote install link)
|
|
182
|
+
3. Set permission tiers: populate tier `topics` + `goals` (schema-validated and saved)
|
|
183
|
+
4. Port scan + reverse proxy guidance (if needed for public hostname)
|
|
184
|
+
5. External IP confirmation and public reachability check (public hostname only)
|
|
185
|
+
|
|
186
|
+
Run it like:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
# Local machine (local-only invites)
|
|
190
|
+
a2a quickstart --port 3001
|
|
191
|
+
|
|
192
|
+
# Server / public hostname
|
|
193
|
+
a2a quickstart --hostname YOUR_DOMAIN:443 --port 3001
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Quickstart prints and saves a tier configuration immediately (validated by the config layer). If you want to override the Friends tier topics/interests, rerun with:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# Provide topics directly
|
|
200
|
+
a2a quickstart --port 3001 --friends-topics "chat,search,openclaw,a2a"
|
|
201
|
+
|
|
202
|
+
# Or prompt interactively for Friends tier topics
|
|
203
|
+
a2a quickstart --port 3001 --interactive
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
If reverse proxy/ingress is required, Quickstart will stop and ask for explicit confirmation (`--confirm-ingress`).
|
|
207
|
+
|
|
208
|
+
Full disclosure onboarding (manifest editing) remains available below: it generates a disclosure manifest that controls what topics your agent discusses or redirects during A2A calls — scoped by access tier (public, friends, family).
|
|
209
|
+
|
|
210
|
+
This onboarding is required before the first `/a2a call`. The owner must approve permissions first.
|
|
211
|
+
|
|
212
|
+
Flow:
|
|
213
|
+
|
|
214
|
+
1. Scan ALL available context to generate a default manifest:
|
|
215
|
+
- Primary: USER.md, SOUL.md, memory/*.md
|
|
216
|
+
- Fallback: ~/.gitconfig, env vars, hostname, installed tools
|
|
217
|
+
- Infer owner's domain from system state if workspace is empty
|
|
218
|
+
2. Present the manifest as a numbered text list grouped by tier:
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
PUBLIC TIER (anyone can see):
|
|
222
|
+
Lead with:
|
|
223
|
+
1. [topic] — [detail]
|
|
224
|
+
2. [topic] — [detail]
|
|
225
|
+
Discuss freely:
|
|
226
|
+
3. [topic] — [detail]
|
|
227
|
+
Deflect:
|
|
228
|
+
4. [topic] — [detail]
|
|
229
|
+
|
|
230
|
+
FRIENDS TIER (trusted contacts):
|
|
231
|
+
Lead with:
|
|
232
|
+
5. [topic] — [detail]
|
|
233
|
+
...
|
|
234
|
+
|
|
235
|
+
FAMILY TIER (inner circle):
|
|
236
|
+
...
|
|
237
|
+
|
|
238
|
+
NEVER DISCLOSE:
|
|
239
|
+
N. [item]
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
3. User edits via text commands:
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
move 3 to friends.lead — Move topic #3 to friends tier lead_with
|
|
246
|
+
remove 5 — Remove topic #5
|
|
247
|
+
add public.discuss "Topic" "Detail about it" — Add new topic
|
|
248
|
+
edit 2 detail "Updated desc" — Edit topic #2's detail
|
|
249
|
+
done — Save manifest and finish
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
4. Manifest saved to `~/.config/openclaw/a2a-disclosure.json`
|
|
253
|
+
|
|
254
|
+
### Open GUI (Dashboard)
|
|
255
|
+
|
|
256
|
+
User says: `/a2a gui`, `/a2a dashboard`, "open the GUI", "open the dashboard", "show me A2A logs"
|
|
257
|
+
|
|
258
|
+
This opens the local dashboard UI in the default browser (or prints the URL if auto-open is not possible).
|
|
259
|
+
|
|
260
|
+
Notes:
|
|
261
|
+
- This command is safe and **does not require onboarding**.
|
|
262
|
+
- Optional: open a specific tab via `--tab`.
|
|
263
|
+
|
|
264
|
+
Remote dashboard access (Callbook Remote):
|
|
265
|
+
- If the owner wants to use the dashboard from a different machine (ex: MacBook), have them open the dashboard locally on the server at `http://127.0.0.1:<port>/dashboard/`.
|
|
266
|
+
- In `Settings` -> `Remote Callbook`, click `Create Install Link (24h)` and copy the URL to the remote machine.
|
|
267
|
+
- The install link is one-time use and exchanges for a long-lived session cookie in the remote browser.
|
|
268
|
+
- To revoke access, use `Settings` -> `Remote Callbook` -> `Paired Devices` -> `Revoke`.
|
|
269
|
+
|
|
270
|
+
Examples:
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
a2a gui
|
|
274
|
+
a2a gui --tab logs
|
|
275
|
+
a2a dashboard --tab calls
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Invite (Create & Share Token)
|
|
279
|
+
|
|
280
|
+
User says: `/a2a invite`, `/a2a invite public`, `/a2a invite friends`, `/a2a invite family`, "create an invite", "generate an A2A invite"
|
|
281
|
+
|
|
282
|
+
**IMPORTANT: You MUST output the full formatted invite below. Do NOT shorten it, summarize it, or skip sections. The entire block is the deliverable.**
|
|
283
|
+
|
|
284
|
+
1. Determine the tier from the user's command (default: `public`).
|
|
285
|
+
2. Run: `a2a create --name "AGENT_NAME" --owner "OWNER_NAME" --expires never --permissions TIER`
|
|
286
|
+
Use the agent's real name and owner name from workspace context.
|
|
287
|
+
3. Extract the `a2a://` invite URL from the CLI output.
|
|
288
|
+
4. Read topics from the config: `cat ~/.config/openclaw/a2a-config.json` — get the tier's `topics` and `goals` arrays.
|
|
289
|
+
5. Output the invite to the user as EXACTLY this format (fill in real values):
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
📞🗣️ **Agent-to-Agent Call Invite**
|
|
294
|
+
|
|
295
|
+
👤 **OWNER_NAME** would like your agent to call **AGENT_NAME** and explore where our owners might collaborate.
|
|
296
|
+
|
|
297
|
+
💬 topic1 · topic2 · topic3 · topic4
|
|
298
|
+
🎯 goal1 · goal2 · goal3
|
|
299
|
+
|
|
300
|
+
a2a://hostname/fed_xxxxx
|
|
301
|
+
|
|
302
|
+
── setup ──
|
|
303
|
+
npm i -g a2acalling && a2a add "a2a://hostname/fed_xxxxx" "AGENT_NAME" && a2a call "AGENT_NAME" "Hello from my owner!"
|
|
304
|
+
https://github.com/onthegonow/a2a_calling
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
Here is a COMPLETE EXAMPLE of what the output must look like for bappybot:
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
📞🗣️ **Agent-to-Agent Call Invite**
|
|
313
|
+
|
|
314
|
+
👤 **Ben Pollack** would like your agent to call **bappybot** and explore where our owners might collaborate.
|
|
315
|
+
|
|
316
|
+
💬 chat · openclaw · a2a-protocol · decentralization · community-living · snow-adventures · interactive-art · music-education
|
|
317
|
+
🎯 grow-network · spread-a2a-awareness · find-collaborators · build-in-public
|
|
318
|
+
|
|
319
|
+
a2a://149.28.213.47:3001/fed_AbCdEfGhIjKlMnOpQrStUvWx
|
|
320
|
+
|
|
321
|
+
── setup ──
|
|
322
|
+
npm i -g a2acalling && a2a add "a2a://149.28.213.47:3001/fed_AbCdEfGhIjKlMnOpQrStUvWx" "bappybot" && a2a call "bappybot" "Hello from my owner!"
|
|
323
|
+
https://github.com/onthegonow/a2a_calling
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
Formatting rules:
|
|
328
|
+
- Join topics with ` · ` (middle dot). Show ALL topics from the tier config, not just "chat".
|
|
329
|
+
- Join goals with ` · `. Omit the 🎯 line only if there are zero goals.
|
|
330
|
+
- The setup line is ONE single copy-pasteable command.
|
|
331
|
+
- GitHub link is always the last line.
|
|
332
|
+
- If the token expires, add `⏰ EXPIRY_DATE` below the invite URL.
|
|
333
|
+
- Never truncate, abbreviate, or skip any part of this template.
|
|
334
|
+
|
|
335
|
+
### Create Token (Advanced)
|
|
336
|
+
|
|
337
|
+
User says: `/a2a create`, "create an A2A token", "let another agent call me"
|
|
338
|
+
|
|
339
|
+
For users who want fine-grained control over token options:
|
|
340
|
+
|
|
341
|
+
```bash
|
|
342
|
+
a2a create --name "NAME" --expires DURATION --permissions LEVEL
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
Options:
|
|
346
|
+
- `--name, -n` — Token label
|
|
347
|
+
- `--expires, -e` — `1h`, `1d`, `7d`, `30d`, `never` (default: `1d`)
|
|
348
|
+
- `--permissions, -p` — `public`, `friends`, `family` (default: `public`)
|
|
349
|
+
- `--disclosure, -d` — `public`, `minimal`, `none` (default: `minimal`)
|
|
350
|
+
- `--notify` — `all`, `summary`, `none` (default: `all`)
|
|
351
|
+
|
|
352
|
+
After creating, format the output as the invite block described above.
|
|
353
|
+
|
|
354
|
+
### List Tokens
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
a2a list
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Revoke Token
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
a2a revoke TOKEN_ID
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
### Add Remote Agent
|
|
367
|
+
|
|
368
|
+
When user shares an invite URL:
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
a2a add "a2a://host/token" "Agent Name"
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### Uninstall
|
|
375
|
+
|
|
376
|
+
User says: `/a2a uninstall`, "uninstall A2A", "remove A2A calling"
|
|
377
|
+
|
|
378
|
+
This stops the pm2-managed server (process name: `a2a`) and optionally deletes local config/DB files under `~/.config/openclaw/`.
|
|
379
|
+
|
|
380
|
+
Ask for confirmation in chat, then run one of:
|
|
381
|
+
|
|
382
|
+
```bash
|
|
383
|
+
# Full uninstall (deletes local config + database)
|
|
384
|
+
a2a uninstall --force
|
|
385
|
+
|
|
386
|
+
# Keep config/DB (for reinstall)
|
|
387
|
+
a2a uninstall --keep-config --force
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
Then tell the user to complete removal with:
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
npm uninstall -g a2acalling
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
## Calling Remote Agents
|
|
397
|
+
|
|
398
|
+
When task delegation to a known remote agent would help, or user asks to contact an A2A agent:
|
|
399
|
+
|
|
400
|
+
```javascript
|
|
401
|
+
// Use a2a_call tool
|
|
402
|
+
a2a_call({
|
|
403
|
+
endpoint: "a2a://host/token",
|
|
404
|
+
message: "Your question here",
|
|
405
|
+
conversation_id: "optional-for-continuity"
|
|
406
|
+
})
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
## Handling Incoming Calls
|
|
410
|
+
|
|
411
|
+
When receiving an A2A call, the agent operates within the token's permission scope.
|
|
412
|
+
|
|
413
|
+
Each tier carries a `capabilities[]` array. `context-read` is always available — the agent can read its own knowledge base to formulate answers. Higher tiers unlock caller-facing capabilities:
|
|
414
|
+
|
|
415
|
+
| Tier | Default Capabilities |
|
|
416
|
+
|------|---------------------|
|
|
417
|
+
| `public` | `context-read` |
|
|
418
|
+
| `friends` | `context-read`, `calendar.read`, `email.read`, `search` |
|
|
419
|
+
| `family` | `context-read`, `calendar`, `email`, `search`, `tools`, `memory` |
|
|
420
|
+
|
|
421
|
+
Topics and goals act as information filters — they control what the agent proactively shares, discusses, or deflects.
|
|
422
|
+
|
|
423
|
+
Apply disclosure level:
|
|
424
|
+
- `public` — Share any non-private info
|
|
425
|
+
- `minimal` — Direct answers only, no owner context
|
|
426
|
+
- `none` — Confirm capability only
|
|
427
|
+
|
|
428
|
+
## Owner Notifications
|
|
429
|
+
|
|
430
|
+
When `notify: all`, send to owner:
|
|
431
|
+
|
|
432
|
+
```
|
|
433
|
+
🤝 A2A call received
|
|
434
|
+
|
|
435
|
+
From: [Caller] ([host])
|
|
436
|
+
Token: "[name]" (expires [date])
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
[Transcript]
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
📊 [N] calls | Expires in [time]
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
Owner can reply to inject into the conversation.
|
|
446
|
+
|
|
447
|
+
## Update
|
|
448
|
+
|
|
449
|
+
Check for and install the latest version. Handles both npm global installs and git clones. Re-syncs SKILL.md and config after update.
|
|
450
|
+
|
|
451
|
+
```bash
|
|
452
|
+
a2a update --check # Check for updates without installing
|
|
453
|
+
a2a update # Update to latest version
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
## Rate Limits
|
|
457
|
+
|
|
458
|
+
Per token: 10/min, 100/hr, 1000/day
|
|
459
|
+
|
|
460
|
+
## Protocol Reference
|
|
461
|
+
|
|
462
|
+
See [docs/protocol.md](docs/protocol.md) for full specification.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Manage the native A2A Callbook app (macOS only)
|
|
3
|
+
allowed-tools: [Bash]
|
|
4
|
+
argument-hint: [install|uninstall|status]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Install, manage, or check the status of the native A2A Callbook desktop app.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/a2a-app # show current app status
|
|
13
|
+
/a2a-app install # download and install the native app
|
|
14
|
+
/a2a-app uninstall # remove the native app
|
|
15
|
+
/a2a-app status # check if installed, show version
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Instructions
|
|
19
|
+
|
|
20
|
+
1. First, detect the platform:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
uname -s
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
If the output is NOT `Darwin`, tell the user:
|
|
27
|
+
"The A2A Callbook native app is only available on macOS. You can use the web dashboard instead: run `/a2a-gui`."
|
|
28
|
+
Stop here.
|
|
29
|
+
|
|
30
|
+
2. If on macOS, determine the subcommand:
|
|
31
|
+
|
|
32
|
+
- **No argument or `status`**: Run `a2a app status`
|
|
33
|
+
- **`install`**: Run `a2a app install`
|
|
34
|
+
- **`uninstall`**: Ask for confirmation first, then run `a2a app uninstall`
|
|
35
|
+
|
|
36
|
+
3. After install, suggest opening the app:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
a2a gui
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
4. Format the output clearly: show install path, version, and whether the app is running.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Call another A2A agent — starts a multi-turn conversation
|
|
3
|
+
allowed-tools: [Bash, Read]
|
|
4
|
+
argument-hint: <contact-or-url> <message>
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Call an A2A agent. This starts a multi-turn agent-to-agent conversation.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/a2a-call Alice "Hello! My owner wants to discuss the project."
|
|
13
|
+
/a2a-call a2a://host.com/fed_abc123 "Reaching out about collaboration"
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Instructions
|
|
17
|
+
|
|
18
|
+
Run the following command with the user's arguments:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
a2a call $ARGUMENTS
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
If the call succeeds, summarize the conversation outcome for the user.
|
|
25
|
+
If it fails with "not onboarded", tell the user to run `/a2a-setup` first.
|
|
26
|
+
If it fails with "contact not found", suggest `/a2a-contacts` to see available contacts.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: List A2A contacts — agents you can call or who can call you
|
|
3
|
+
allowed-tools: [Bash]
|
|
4
|
+
argument-hint: [add|show|ping|rm] [args...]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Manage your A2A contact list — see who you can call and who has access to you.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/a2a-contacts # list all contacts
|
|
13
|
+
/a2a-contacts add a2a://host/fed_xxx Alice # add contact from invite URL
|
|
14
|
+
/a2a-contacts show Alice # show contact details
|
|
15
|
+
/a2a-contacts ping Alice # check if contact is online
|
|
16
|
+
/a2a-contacts rm Alice # remove a contact
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Instructions
|
|
20
|
+
|
|
21
|
+
Run the appropriate command based on user input:
|
|
22
|
+
|
|
23
|
+
- No arguments: `a2a contacts`
|
|
24
|
+
- `add`: `a2a contacts add $ARGUMENTS`
|
|
25
|
+
- `show`: `a2a contacts show $ARGUMENTS`
|
|
26
|
+
- `ping`: `a2a contacts ping $ARGUMENTS`
|
|
27
|
+
- `rm`: `a2a contacts rm $ARGUMENTS`
|
|
28
|
+
|
|
29
|
+
If the user just wants to see their contacts, also run `a2a list` to show active tokens (outbound invites).
|
|
30
|
+
|
|
31
|
+
Format the output clearly: contact name, owner, status (online/offline), permission tier, last seen.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Browse and manage A2A conversations
|
|
3
|
+
allowed-tools: [Bash]
|
|
4
|
+
argument-hint: [show <id>|end <id>|--contact <name>|--status active]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
List, view, and manage A2A agent conversations.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/a2a-conversations # list recent conversations
|
|
13
|
+
/a2a-conversations --contact Alice # filter by contact
|
|
14
|
+
/a2a-conversations --status active # filter by status
|
|
15
|
+
/a2a-conversations show <id> # show conversation details with messages
|
|
16
|
+
/a2a-conversations end <id> # end an active conversation
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Instructions
|
|
20
|
+
|
|
21
|
+
Parse the user's arguments to determine the action:
|
|
22
|
+
|
|
23
|
+
### List conversations (default)
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
a2a conversations $ARGUMENTS
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Format as a table: ID, contact, status (active/concluded/timeout), message count, last activity.
|
|
30
|
+
|
|
31
|
+
### Show conversation detail
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
a2a conversations show $ID
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Display the full conversation: each message with timestamp, direction (inbound/outbound), and content. Show the summary if the conversation has concluded.
|
|
38
|
+
|
|
39
|
+
### End a conversation
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
a2a conversations end $ID
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
This generates a summary and marks the conversation as concluded. Show the summary to the user.
|
|
46
|
+
|
|
47
|
+
If no conversations exist, suggest: "No conversations yet. Start one with `/a2a-call`."
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Open the A2A dashboard in browser or native app
|
|
3
|
+
allowed-tools: [Bash]
|
|
4
|
+
argument-hint: [--tab contacts|calls|logs|settings|invites]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Open the A2A Calling dashboard. Uses the native Callbook app if installed, otherwise opens in the default browser.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/a2a-gui # open dashboard
|
|
13
|
+
/a2a-gui --tab contacts # open specific tab
|
|
14
|
+
/a2a-gui --tab calls # open calls tab
|
|
15
|
+
/a2a-gui --tab logs # open logs tab
|
|
16
|
+
/a2a-gui --tab settings # open settings tab
|
|
17
|
+
/a2a-gui --tab invites # open invites tab
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Instructions
|
|
21
|
+
|
|
22
|
+
Run the dashboard command with any arguments:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
a2a gui $ARGUMENTS
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
If it fails because the server is not running, suggest `/a2a-setup` to start it.
|
|
29
|
+
|
|
30
|
+
Tell the user the dashboard URL (typically `http://127.0.0.1:<port>/dashboard/`) so they can also bookmark it.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Create or revoke A2A invite tokens for sharing with other agents
|
|
3
|
+
allowed-tools: [Bash]
|
|
4
|
+
argument-hint: [name] [--tier public|friends|family] [--expires 7d] | revoke <id>
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Create an A2A federation token and display the invite URL, or revoke an existing token.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
### Create invite
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
/a2a-invite Alice --tier friends --expires 7d
|
|
15
|
+
/a2a-invite "Bob's Agent" --tier public
|
|
16
|
+
/a2a-invite # interactive — uses defaults
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Revoke invite
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
/a2a-invite revoke <token_id> # revoke a specific token
|
|
23
|
+
/a2a-invite list # list active tokens to find IDs
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Instructions
|
|
27
|
+
|
|
28
|
+
### Create flow
|
|
29
|
+
|
|
30
|
+
Parse the user's arguments and run:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
a2a create $ARGUMENTS
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
If no arguments provided, run `a2a create` with no flags (interactive mode).
|
|
37
|
+
|
|
38
|
+
After success, display the invite URL prominently and explain:
|
|
39
|
+
1. The URL format: `a2a://<hostname>/<token>`
|
|
40
|
+
2. Share this URL with the other agent's owner
|
|
41
|
+
3. The token tier controls what the caller can access (public = read-only, friends = calendar/email/search read, family = full access)
|
|
42
|
+
4. The token expires per the `--expires` flag (default: never)
|
|
43
|
+
|
|
44
|
+
Also suggest: "Run `/a2a-contacts` to see who already has access."
|
|
45
|
+
|
|
46
|
+
### Revoke flow
|
|
47
|
+
|
|
48
|
+
If the first argument is `revoke`:
|
|
49
|
+
|
|
50
|
+
1. If a token ID is provided: `a2a revoke <id>`
|
|
51
|
+
2. If no ID provided: first run `a2a list` to show active tokens, then ask the user which to revoke.
|
|
52
|
+
|
|
53
|
+
**Always confirm before revoking:** "This will permanently invalidate token <id>. The holder will no longer be able to call you. Proceed?"
|
|
54
|
+
|
|
55
|
+
### List flow
|
|
56
|
+
|
|
57
|
+
If the first argument is `list`:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
a2a list
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Show active tokens with their IDs, names, tiers, and expiry dates.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Set up A2A Calling — onboard, start server, configure agent
|
|
3
|
+
allowed-tools: [Bash, Read, Write]
|
|
4
|
+
argument-hint: [--force]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Set up or reset your A2A Calling installation. Runs onboarding, starts the server, and configures your agent.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/a2a-setup # first-time setup or resume incomplete onboarding
|
|
13
|
+
/a2a-setup --force # reset and re-run from scratch
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Instructions
|
|
17
|
+
|
|
18
|
+
1. Check if already onboarded: `a2a config --show`
|
|
19
|
+
2. If not onboarded (or `--force`): run `a2a quickstart $ARGUMENTS`
|
|
20
|
+
3. If already onboarded but server not running: run `a2a server` in background
|
|
21
|
+
4. After setup, show the status with `a2a config --show` and `a2a list`
|
|
22
|
+
|
|
23
|
+
The quickstart flow will:
|
|
24
|
+
- Detect an available port
|
|
25
|
+
- Start the A2A server
|
|
26
|
+
- Detect the hostname
|
|
27
|
+
- Prompt for disclosure topics (what your agent discusses)
|
|
28
|
+
- Save the configuration
|
|
29
|
+
|
|
30
|
+
If running non-interactively, quickstart auto-accepts defaults.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Reinstall A2A skill files into current project
|
|
3
|
+
allowed-tools: [Bash]
|
|
4
|
+
argument-hint: [--check|--force]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Reinstall or check A2A slash-command skill files in the current project.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/a2a-skills # reinstall skill files (skips unchanged)
|
|
13
|
+
/a2a-skills --check # check which files are installed vs missing
|
|
14
|
+
/a2a-skills --force # force reinstall all files
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Instructions
|
|
18
|
+
|
|
19
|
+
Run the skills command with the user's arguments:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
a2a skills $ARGUMENTS
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Show the result: which files were installed, skipped (already up to date), or had errors.
|
|
26
|
+
|
|
27
|
+
If files were reinstalled, suggest reloading Claude Code to pick up the new slash commands.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Check A2A server status, active conversations, version, and agent health
|
|
3
|
+
allowed-tools: [Bash, Read]
|
|
4
|
+
argument-hint: [--version]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Check the health of your A2A installation — server running, conversations active, contacts online, version info.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/a2a-status # full status dashboard
|
|
13
|
+
/a2a-status --version # show version only
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Instructions
|
|
17
|
+
|
|
18
|
+
### Version only
|
|
19
|
+
|
|
20
|
+
If `--version` is specified:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
a2a version
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Show the version and exit.
|
|
27
|
+
|
|
28
|
+
### Full status (default)
|
|
29
|
+
|
|
30
|
+
Run these commands and compile a status report:
|
|
31
|
+
|
|
32
|
+
1. **Version:** `a2a version`
|
|
33
|
+
2. **Config:** `a2a config --show`
|
|
34
|
+
3. **Active tokens:** `a2a list`
|
|
35
|
+
4. **Contacts:** `a2a contacts`
|
|
36
|
+
5. **Recent conversations:** `a2a conversations --limit 5`
|
|
37
|
+
|
|
38
|
+
Present a clear status dashboard:
|
|
39
|
+
- Version: current version number
|
|
40
|
+
- Server: running/stopped (with port and hostname)
|
|
41
|
+
- Tokens: N active, N expired/revoked
|
|
42
|
+
- Contacts: N total
|
|
43
|
+
- Recent calls: last 5 conversations with status
|
|
44
|
+
|
|
45
|
+
If the server is not running, suggest `/a2a-setup` to start it.
|
|
46
|
+
If not onboarded, suggest `/a2a-setup` for first-time setup.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Uninstall A2A Calling — stop server and remove config
|
|
3
|
+
allowed-tools: [Bash, Read]
|
|
4
|
+
argument-hint: [--keep-config]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Uninstall A2A Calling. Stops the server, removes skill files, and optionally removes configuration.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/a2a-uninstall # uninstall with confirmation
|
|
13
|
+
/a2a-uninstall --keep-config # uninstall but preserve config files
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Instructions
|
|
17
|
+
|
|
18
|
+
**This is a destructive operation. Always confirm with the user before proceeding.**
|
|
19
|
+
|
|
20
|
+
1. Show the user what will be removed:
|
|
21
|
+
- Running A2A server (will be stopped)
|
|
22
|
+
- Skill files in `.claude/commands/a2a-*.md`
|
|
23
|
+
- CLAUDE.md A2A section
|
|
24
|
+
- `.codex/AGENTS.md`
|
|
25
|
+
- Config at `~/.config/openclaw/a2a-config.json` (unless `--keep-config`)
|
|
26
|
+
- Disclosure at `~/.config/openclaw/a2a-disclosure.json` (unless `--keep-config`)
|
|
27
|
+
|
|
28
|
+
2. Ask the user to confirm: "This will stop the A2A server and remove installed files. Proceed?"
|
|
29
|
+
|
|
30
|
+
3. If confirmed, run:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
a2a uninstall --force
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
If `--keep-config` was specified, tell the user their config files were preserved and can be reused on reinstall.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Check for and install A2A updates
|
|
3
|
+
allowed-tools: [Bash]
|
|
4
|
+
argument-hint: [--check]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Check for available A2A updates and optionally install them.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/a2a-update # check for updates and install if available
|
|
13
|
+
/a2a-update --check # check only, don't install
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Instructions
|
|
17
|
+
|
|
18
|
+
1. First, check for updates:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
a2a update --check
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
2. Show the user the current version vs available version.
|
|
25
|
+
|
|
26
|
+
3. If an update is available and `--check` was NOT specified:
|
|
27
|
+
- Tell the user what version is available
|
|
28
|
+
- Ask for confirmation before updating
|
|
29
|
+
- If confirmed, run:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
a2a update
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
4. After updating, show the new version:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
a2a version
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
If the user is already on the latest version, tell them so.
|
package/ARCHITECTURE.md
CHANGED
|
@@ -74,7 +74,7 @@ Only two runtime dependencies (intentionally minimal):
|
|
|
74
74
|
|
|
75
75
|
## Dashboard
|
|
76
76
|
|
|
77
|
-
Single-page app served from `src/dashboard/public/`. Uses Shoelace web components. Communicates with the API via `/dashboard/api/*` routes.
|
|
77
|
+
Single-page app served from `src/dashboard/public/`. Uses Shoelace web components. Communicates with the API via `/dashboard/api/*` routes. Includes tabs: Contacts, Calls, Logs, Settings, Invites, Permissions, and Health (E2E test results).
|
|
78
78
|
|
|
79
79
|
## Native macOS App
|
|
80
80
|
|
|
@@ -88,3 +88,5 @@ Zero-dependency test runner at `test/run.js` with custom assert API. Three test
|
|
|
88
88
|
- `test/e2e/` — End-to-end tests for full system flows
|
|
89
89
|
|
|
90
90
|
Test profiles at `test/profiles/` represent real personas with distinct permission tiers.
|
|
91
|
+
|
|
92
|
+
E2E test results are persisted to `~/.config/openclaw/a2a-e2e-results.json` via `test/e2e/persist.js` and surfaced in the dashboard Health tab. The `scripts/run-e2e.sh` orchestrator runs E2E suites and stores results.
|