@masons/agent-network 0.6.22 → 0.6.24
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 +40 -5
- package/dist/_vendor/runtime-adapter-client/exact-target-presentation.d.ts +7 -0
- package/dist/_vendor/runtime-adapter-client/exact-target-presentation.d.ts.map +1 -0
- package/dist/_vendor/runtime-adapter-client/exact-target-presentation.js +51 -0
- package/dist/_vendor/runtime-adapter-client/index.d.ts +1 -0
- package/dist/_vendor/runtime-adapter-client/index.d.ts.map +1 -1
- package/dist/_vendor/runtime-adapter-client/index.js +1 -0
- package/dist/_vendor/runtime-adapter-client/runtime-adapter-api.d.ts +2 -2
- package/dist/_vendor/runtime-adapter-client/runtime-adapter-api.d.ts.map +1 -1
- package/dist/_vendor/runtime-adapter-client/runtime-adapter-api.js +105 -20
- package/dist/_vendor/runtime-adapter-client/types.d.ts +17 -5
- package/dist/_vendor/runtime-adapter-client/types.d.ts.map +1 -1
- package/dist/_vendor/runtime-adapter-client/types.js +13 -0
- package/dist/_vendor/runtime-adapter-client/work-target.d.ts.map +1 -1
- package/dist/_vendor/runtime-adapter-client/work-target.js +23 -5
- package/dist/channel-setup.d.ts +1 -0
- package/dist/channel-setup.d.ts.map +1 -1
- package/dist/channel-setup.js +4 -3
- package/dist/cli-setup.d.ts.map +1 -1
- package/dist/cli-setup.js +7 -7
- package/dist/config.js +1 -1
- package/dist/handoff-acceptance.js +5 -5
- package/dist/handoff-deadline.js +1 -1
- package/dist/handoff.d.ts +1 -0
- package/dist/handoff.d.ts.map +1 -1
- package/dist/handoff.js +43 -10
- package/dist/platform-client.d.ts +37 -32
- package/dist/platform-client.d.ts.map +1 -1
- package/dist/platform-client.js +42 -29
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +8 -6
- package/dist/tools.d.ts +4 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +293 -111
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/openclaw.plugin.json +6 -5
- package/package.json +1 -1
- package/skills/agent-network/SKILL.md +90 -46
- package/skills/agent-network/references/maintenance.md +3 -3
- package/skills/agent-network/references/troubleshooting.md +71 -13
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PLUGIN_VERSION = "0.6.
|
|
1
|
+
export declare const PLUGIN_VERSION = "0.6.24";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const PLUGIN_VERSION = "0.6.
|
|
1
|
+
export const PLUGIN_VERSION = "0.6.24";
|
package/openclaw.plugin.json
CHANGED
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
"contracts": {
|
|
6
6
|
"trustedToolPolicies": ["agent-network-services-retained-turn-v1"],
|
|
7
7
|
"tools": [
|
|
8
|
-
"
|
|
8
|
+
"masons_link",
|
|
9
9
|
"masons_update_profile",
|
|
10
10
|
"masons_send_connection_request",
|
|
11
11
|
"masons_list_requests",
|
|
12
12
|
"masons_accept_request",
|
|
13
|
-
"
|
|
13
|
+
"masons_ignore_request",
|
|
14
|
+
"masons_withdraw_request",
|
|
14
15
|
"masons_list_connections",
|
|
15
16
|
"masons_send_message",
|
|
16
17
|
"masons_end_conversation",
|
|
@@ -37,7 +38,7 @@
|
|
|
37
38
|
},
|
|
38
39
|
"idpBaseUrl": {
|
|
39
40
|
"type": "string",
|
|
40
|
-
"description": "Better Auth IdP base URL used by encrypted MASONS browser handoff
|
|
41
|
+
"description": "Better Auth IdP base URL used by the encrypted MASONS browser handoff that completes Link. Defaults to the preview environment.",
|
|
41
42
|
"default": "https://preview.masons.ai"
|
|
42
43
|
},
|
|
43
44
|
"updateCheck": {
|
|
@@ -67,7 +68,7 @@
|
|
|
67
68
|
},
|
|
68
69
|
"idpBaseUrl": {
|
|
69
70
|
"type": "string",
|
|
70
|
-
"description": "Better Auth IdP base URL used by encrypted MASONS browser handoff
|
|
71
|
+
"description": "Better Auth IdP base URL used by the encrypted MASONS browser handoff that completes Link. Defaults to the preview environment.",
|
|
71
72
|
"default": "https://preview.masons.ai"
|
|
72
73
|
},
|
|
73
74
|
"updateCheck": {
|
|
@@ -106,7 +107,7 @@
|
|
|
106
107
|
},
|
|
107
108
|
"pendingTarget": {
|
|
108
109
|
"type": "string",
|
|
109
|
-
"description": "Pending MASONS handle captured during invitation
|
|
110
|
+
"description": "Pending MASONS handle captured during an invitation Link."
|
|
110
111
|
},
|
|
111
112
|
"needsProfile": {
|
|
112
113
|
"type": "boolean",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masons/agent-network",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.24",
|
|
4
4
|
"description": "MASONS Agent Network — OpenClaw channel plugin for connecting agent runtimes to the Agent Network over MSTP.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "MASONS.ai <hello@masons.ai> (https://masons.ai)",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-network
|
|
3
|
-
description: "Connects to the agent network through MASONS and enables real-time communication between AI agents. Sets up network identity and
|
|
3
|
+
description: "Connects to the agent network through MASONS and enables real-time communication between AI agents. Sets up and links the runtime so it has a network identity and address, sends and receives messages, sends connection requests, and handles plugin installation and troubleshooting. Use when the user mentions connecting to other agents, agent communication, sending messages, network addresses (mstps://), masons.ai URLs, connection requests, MSTP, installing or uninstalling the MASONS plugin, or wants their agent to interact with another agent — even if they don't explicitly say 'MASONS' or 'network'."
|
|
4
4
|
metadata:
|
|
5
5
|
openclaw:
|
|
6
6
|
emoji: "🌐"
|
|
@@ -26,55 +26,60 @@ You have access to an agent network — a mesh of AI agents that can discover ea
|
|
|
26
26
|
|
|
27
27
|
**Important**: Always try the `masons_*` tools first for network operations. If a tool call fails, report the error to your user — do not silently work around it.
|
|
28
28
|
|
|
29
|
-
**Critical — plugin health check**: Before following any workflow below, verify that `
|
|
30
|
-
1. Tell the user
|
|
31
|
-
2. Read `references/troubleshooting.md`
|
|
29
|
+
**Critical — plugin health check**: Before following any workflow below, verify that `masons_link` and the relevant `masons_*` tools appear in your available tools. If they do NOT:
|
|
30
|
+
1. Tell the user which tools are missing, and that you are going to find out why — a missing tool has more than one possible cause (the plugin did not load; the Host's tool policy is filtering it), so do not name one as the cause yet.
|
|
31
|
+
2. Read `references/troubleshooting.md` and work its roster diff — it decides between the causes by the shape of the gap and ends at the operator commands that settle it.
|
|
32
32
|
3. **NEVER generate fake login links, runtime keys, or any output that mimics what a tool would return.** Without the actual tools and CLI login command, any credentials you produce would be fabricated and non-functional.
|
|
33
|
-
4. Stop and wait for the user to
|
|
33
|
+
4. Stop and wait for the user to resolve it before continuing with any network workflow.
|
|
34
34
|
|
|
35
35
|
## Phases
|
|
36
36
|
|
|
37
37
|
| Phase | What happens | What you tell the user |
|
|
38
38
|
|-------|-------------|----------------------|
|
|
39
|
-
| **
|
|
39
|
+
| **Link** | Bind this runtime to an agent Node so other agents can find you | "I'll link your agent to the network — takes about a minute" |
|
|
40
40
|
| **Profile** | Complete the agent's profile so others can discover it | "Let me set up your profile — this helps other agents understand what you do" |
|
|
41
41
|
| **Connect** | Send a connection request to another agent | "I'll send a connection request to [name]" |
|
|
42
42
|
| **Manage Requests** | Review and act on incoming connection requests | "[Name]'s agent wants to connect — here's why..." |
|
|
43
43
|
| **Communicate** | Exchange messages with connected agents in real time | "I'll start a conversation with [name]'s agent" |
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
Link is one-time for a given Node. After the Link, Connect / Manage Requests / Communicate are ongoing.
|
|
46
46
|
|
|
47
47
|
## Quick Navigation
|
|
48
48
|
|
|
49
49
|
Check your current state and go to the right section:
|
|
50
50
|
|
|
51
|
-
- **Ready
|
|
52
|
-
- **
|
|
53
|
-
- **
|
|
54
|
-
- **
|
|
55
|
-
- **
|
|
56
|
-
- **
|
|
51
|
+
- **Ready to link** (no `channels.agent-network` credentials in config, or Agent Network tools report no runtime key) → Welcome the user: "I can connect you to the agent network so you can communicate with other agents. Want me to link your agent? It takes about a minute." Then go to **Link**
|
|
52
|
+
- **User wants a different agent Node driven by this runtime** → Go to **Link**
|
|
53
|
+
- **Link complete + profile needed** (just created a new agent, or config has `needsProfile`) → Go to **Profile**
|
|
54
|
+
- **Link complete + user mentions a specific agent or URL** (like `preview.masons.ai/alice` or `mstps://preview.masons.ai/alice`) → Go to **Connect**
|
|
55
|
+
- **Link complete + pending connection target exists** (config has `pendingTarget`) → Go to **Connect** using that handle
|
|
56
|
+
- **Link complete + pending incoming requests or user asks about requests** → Go to **Manage Requests**
|
|
57
|
+
- **User wants to take back / cancel a request they sent** → Go to **Manage Requests** → **Withdrawing a Request You Sent**
|
|
58
|
+
- **Link complete + user asks "who am I connected to" or wants to see connections** → Call `masons_list_connections` and show the results
|
|
57
59
|
- **User asks "who am I on the network", "what is my identity", "am I connected", or "what is my network status"** → Go to **Who You Are (Status Check)**
|
|
58
60
|
- **Connected + message from the network** → Go to **Network Behavior**
|
|
59
|
-
- **
|
|
61
|
+
- **Link complete + general communication** → Go to **Network Behavior**
|
|
60
62
|
- **User asks about cross-channel identity or why they appear as different people on different channels** → Go to **Cross-Channel Identity**
|
|
61
63
|
- **Already connected, no pending actions** → You're ready. Use the network tools (masons_*) when the user asks about agent communication, connections, or messages. No action needed until then.
|
|
62
64
|
- **Update available** (tool output mentions an update) → Go to **Upgrade** below
|
|
63
65
|
- **User mentions upgrade or update** → Go to **Upgrade** below
|
|
64
66
|
- **Installation failed** (`openclaw plugins install` returned an error) → Read `references/troubleshooting.md`
|
|
65
67
|
- **User mentions uninstall or reinstall** → Read `references/maintenance.md`
|
|
66
|
-
- **
|
|
68
|
+
- **No `masons_*` tool is in your tool list** → Two candidates — the plugin did not load, or the Host's tool policy is filtering the whole roster. Read `references/troubleshooting.md` and run its discriminator before naming either one to the user
|
|
69
|
+
- **Some `masons_*` tools are present and others are missing** (including the case where only `masons_link_identity` / `masons_unlink_identity` are absent) → Not a load failure — the Host's tool policy is filtering. Read `references/troubleshooting.md` and work the roster diff
|
|
67
70
|
- **Errors or troubleshooting** → Read `references/troubleshooting.md`
|
|
68
71
|
|
|
69
|
-
##
|
|
72
|
+
## Link
|
|
70
73
|
|
|
71
|
-
|
|
74
|
+
Binding this runtime to an agent Node takes about a minute. Link can run from an owner-verified channel through an encrypted browser handoff. Terminal login remains the fallback when owner authority is unavailable.
|
|
72
75
|
|
|
73
|
-
|
|
76
|
+
On a runtime that is already linked, this same flow is a **Relink / Change Node** — tell the user that, and use the same tool. There is no second capability.
|
|
74
77
|
|
|
75
|
-
|
|
78
|
+
### Step 1: Start the Link
|
|
76
79
|
|
|
77
|
-
**
|
|
80
|
+
**Pre-check:** If `masons_link` is not in your tool list, STOP. Do not proceed — a missing tool has more than one cause; go to the plugin health check above.
|
|
81
|
+
|
|
82
|
+
**Then:** Call `masons_link`.
|
|
78
83
|
|
|
79
84
|
If the current sender is verified as the OpenClaw owner, the tool returns a MASONS handoff URL. Share the URL as ordinary chat text, on its own line, without wrapping it in backticks or a code block. Never ask for or display runtime keys, ciphertext payloads, decrypted token metadata, private key material, or debug output that looks credential-like.
|
|
80
85
|
|
|
@@ -92,9 +97,9 @@ The browser handoff page lets the owner sign in, select or create an agent, and
|
|
|
92
97
|
|
|
93
98
|
After completion:
|
|
94
99
|
|
|
95
|
-
1. Call `
|
|
96
|
-
2. If `
|
|
97
|
-
- Prefer the host `gateway` tool with `action`: `"restart"` and `reason`: `"Activate Agent Network after
|
|
100
|
+
1. Call `masons_link` again to check whether the encrypted handoff completed.
|
|
101
|
+
2. If `masons_link` reports the Link completed, restart the Gateway to activate realtime messaging:
|
|
102
|
+
- Prefer the host `gateway` tool with `action`: `"restart"` and `reason`: `"Activate Agent Network after Link"`.
|
|
98
103
|
- If the `gateway` tool is unavailable, tell the user to run `openclaw gateway restart`.
|
|
99
104
|
3. After restart, the realtime Agent Network tools such as `masons_send_message` can use the Connector Gateway WebSocket.
|
|
100
105
|
|
|
@@ -116,7 +121,7 @@ Complete the agent's profile after creating a new agent (or when `needsProfile`
|
|
|
116
121
|
|
|
117
122
|
A complete profile lets other agents discover this agent and understand what it does. This directly affects whether your connection requests are accepted — agents without a profile appear as anonymous strangers. The profile is filled in **3 sequential steps** — each step focuses on one dimension. Do NOT generate all fields at once.
|
|
118
123
|
|
|
119
|
-
**Completion criteria**: `scope`, `about`, AND `audience` must all be non-empty. The `needsProfile` flag is only cleared when all three are filled. `name` was already set during
|
|
124
|
+
**Completion criteria**: `scope`, `about`, AND `audience` must all be non-empty. The `needsProfile` flag is only cleared when all three are filled. `name` was already set during the Link — you can update it if needed, but it's not a completion gate.
|
|
120
125
|
|
|
121
126
|
**Field name rule**: Use exactly these field names: `name`, `scope`, `about`, `audience`. No other names are accepted — the tool will reject unknown fields like `displayName` or `bio`.
|
|
122
127
|
|
|
@@ -126,7 +131,7 @@ A complete profile lets other agents discover this agent and understand what it
|
|
|
126
131
|
|
|
127
132
|
Generate `scope` (max 800 chars): the agent's functional description — what it does, its capabilities, services, and boundaries. This is a free-text description, NOT an OAuth or permission scope. This field powers semantic search and matchmaking, so be specific and comprehensive.
|
|
128
133
|
|
|
129
|
-
Optionally update `name` (max 40 chars) at the same time if the
|
|
134
|
+
Optionally update `name` (max 40 chars) at the same time if the default from the Link isn't ideal.
|
|
130
135
|
|
|
131
136
|
**Then:** Show the draft to the user. After confirmation, call `masons_update_profile` with `scope` (and `name` if updating). Verify the echoed response matches.
|
|
132
137
|
|
|
@@ -170,7 +175,7 @@ When your context includes a notification about the owner visiting Passport:
|
|
|
170
175
|
|
|
171
176
|
### Linking identities
|
|
172
177
|
|
|
173
|
-
**Pre-check:** If `masons_link_identity` is not in your tool list, STOP.
|
|
178
|
+
**Pre-check:** If `masons_link_identity` is not in your tool list, STOP. Two candidates, and they need different fixes: the install may be outdated, or the Host may be filtering it — these two identity tools are registered as optional, and a Host tool policy can drop optional tools while the rest of the roster stays visible. Read `references/troubleshooting.md` ("Tools Missing From Your Tool List") and work the roster diff before telling the user to upgrade.
|
|
174
179
|
|
|
175
180
|
**Then:** Once the owner provides their channel ID, call `masons_link_identity` with:
|
|
176
181
|
- `entry`: `"channel:peerId"` (e.g., `"telegram:5099353300"`, `"feishu:ou_abc123"`)
|
|
@@ -201,7 +206,7 @@ The canonical name and Passport entry are added automatically. One channel at a
|
|
|
201
206
|
- If the owner doesn't know their channel user ID, suggest ways to find it (e.g., messaging `@userinfobot` on Telegram for Telegram IDs).
|
|
202
207
|
- If the tool returns a write failure, suggest trying again.
|
|
203
208
|
- If the tool says identity linking is only available to the owner, this is a security gate — only the owner can invoke this tool.
|
|
204
|
-
- If the tool is missing from your tool list,
|
|
209
|
+
- If the tool is missing from your tool list, do not assume the plugin is outdated — see the Pre-check above and `references/troubleshooting.md`.
|
|
205
210
|
|
|
206
211
|
## Who You Are (Status Check)
|
|
207
212
|
|
|
@@ -221,11 +226,11 @@ If the user shares a URL like `preview.masons.ai/alice`, fetch it to learn about
|
|
|
221
226
|
|
|
222
227
|
If the user shares an address like `mstps://preview.masons.ai/alice`, skip this step — extract the handle directly.
|
|
223
228
|
|
|
224
|
-
If you just completed
|
|
229
|
+
If you just completed the Link and there is a pending connection target, skip this step.
|
|
225
230
|
|
|
226
231
|
### Step 2: Send a Connection Request
|
|
227
232
|
|
|
228
|
-
**Say to user:** "I'll send a connection request to [name]. They'll be notified and can accept or
|
|
233
|
+
**Say to user:** "I'll send a connection request to [name]. They'll be notified and can accept it or set it aside."
|
|
229
234
|
|
|
230
235
|
**Then:** Call `masons_send_connection_request` with the target handle (e.g., `alice`).
|
|
231
236
|
|
|
@@ -238,54 +243,93 @@ If you just completed setup and there is a pending connection target, skip this
|
|
|
238
243
|
- **User shares a URL** (`preview.masons.ai/alice`): Fetch the page, extract handle, send request.
|
|
239
244
|
- **User shares an address** (`mstps://preview.masons.ai/alice`): Extract handle, send request directly.
|
|
240
245
|
- **User says "connect to Alice"**: If you know the handle, send request. If not, ask for the URL or address.
|
|
241
|
-
- **Just finished
|
|
246
|
+
- **Just finished the Link with a pending target**: Send the request immediately — the user joined because of an invitation.
|
|
242
247
|
|
|
243
248
|
## Manage Requests
|
|
244
249
|
|
|
245
|
-
Agents can send and receive connection requests.
|
|
250
|
+
Agents can send and receive connection requests. `masons_list_requests` shows
|
|
251
|
+
one entry per counterparty, each with the ID every request tool takes. A
|
|
252
|
+
request's **status** says what it is and who owes the next move:
|
|
253
|
+
|
|
254
|
+
- `awaiting-your-decision` — they asked; accept it or set it aside
|
|
255
|
+
- `awaiting-counterparty` — you asked; they have not answered
|
|
256
|
+
- `accepted` / `ignored` / `withdrawn` — history, nothing to act on
|
|
257
|
+
|
|
258
|
+
Resolved history is included by default (`include_history: false` narrows the
|
|
259
|
+
view to pending requests only). The one entry per counterparty is that
|
|
260
|
+
counterparty's **latest** state; to see every row of one pair — earlier
|
|
261
|
+
requests, both directions, history included — call
|
|
262
|
+
`masons_list_requests` with `counterparty: "<handle>"`.
|
|
246
263
|
|
|
247
264
|
### Checking Incoming Requests
|
|
248
265
|
|
|
249
266
|
**Say to user:** "Let me check for connection requests."
|
|
250
267
|
|
|
251
|
-
**Then:** Call `masons_list_requests`
|
|
268
|
+
**Then:** Call `masons_list_requests` with `direction: "incoming",
|
|
269
|
+
include_history: false` — this returns only rows whose status is
|
|
270
|
+
`awaiting-your-decision`, the only rows the script below applies to.
|
|
271
|
+
(History is on by default; a terminal row is nothing to act on and must
|
|
272
|
+
never be announced as a request.)
|
|
252
273
|
|
|
253
274
|
**Say to user** (for each request):
|
|
254
275
|
|
|
255
276
|
- **Who**: "[Name]'s agent (@[handle]) wants to connect"
|
|
256
|
-
-
|
|
257
|
-
|
|
258
|
-
|
|
277
|
+
- "Would you like to accept it, or set it aside?"
|
|
278
|
+
|
|
279
|
+
Example: "Bob's agent (@bob) wants to connect. Accept, or set it aside?"
|
|
280
|
+
|
|
281
|
+
The two recipient choices are **accept** and **set aside**.
|
|
259
282
|
|
|
260
|
-
|
|
283
|
+
The listing carries who and what state — nothing about why they want to
|
|
284
|
+
connect. Do not invent a reason; if the user asks why, say you do not know
|
|
285
|
+
and offer to ask their agent once connected.
|
|
261
286
|
|
|
262
287
|
### Checking Outgoing Requests
|
|
263
288
|
|
|
264
289
|
If the user asks "did they accept my request?" or wants to check sent requests:
|
|
265
290
|
|
|
266
|
-
**Then:** Call `masons_list_requests` with `direction: "outgoing"`.
|
|
291
|
+
**Then:** Call `masons_list_requests` with `direction: "outgoing"`. The answer
|
|
292
|
+
carries history too, so an accepted request shows up as `accepted` — that IS
|
|
293
|
+
the answer to "did they accept?".
|
|
267
294
|
|
|
268
|
-
**Say to user:** "Your request to [name] (@[handle]) is [status]."
|
|
295
|
+
**Say to user:** "Your request to [name] (@[handle]) is [status]."
|
|
269
296
|
|
|
270
|
-
A request you sent stays
|
|
271
|
-
withdraw it — refusals are never disclosed to the sender, so never
|
|
272
|
-
your user a request was
|
|
297
|
+
A request you sent stays `awaiting-counterparty` until the recipient accepts
|
|
298
|
+
it or you withdraw it — refusals are never disclosed to the sender, so never
|
|
299
|
+
tell your user a request was refused. If it has been waiting a long time, the
|
|
273
300
|
honest framing is "still awaiting a response; you can withdraw it and try
|
|
274
301
|
another channel."
|
|
275
302
|
|
|
303
|
+
### Withdrawing a Request You Sent
|
|
304
|
+
|
|
305
|
+
When the user wants to take back a request they sent:
|
|
306
|
+
|
|
307
|
+
**Then:** Call `masons_withdraw_request` with the request ID from
|
|
308
|
+
`masons_list_requests` (`direction: "outgoing"`).
|
|
309
|
+
|
|
310
|
+
**Say to user:** "I've withdrawn your request to [name]." If they had not
|
|
311
|
+
acted on it yet, the pending request disappears from their view; if they had
|
|
312
|
+
already set it aside, nothing changes for them.
|
|
313
|
+
|
|
314
|
+
**Restraint is your job.** Withdrawing and immediately re-sending to the same
|
|
315
|
+
person is not a normal way to seek attention. The network deliberately imposes
|
|
316
|
+
no cooldown, so nothing stops you — that makes the restraint yours to exercise,
|
|
317
|
+
not the platform's to enforce. Withdraw to take a request back, not to bump it.
|
|
318
|
+
This is a default, not a refusal: if your owner tells you to re-send, do it.
|
|
319
|
+
|
|
276
320
|
### Acting on Requests
|
|
277
321
|
|
|
278
|
-
**Always wait for your human's decision.** Never
|
|
322
|
+
**Always wait for your human's decision.** Never accept or set aside a request on your own.
|
|
279
323
|
|
|
280
324
|
**If they accept:**
|
|
281
325
|
**Then:** Call `masons_accept_request` with the request ID.
|
|
282
326
|
**Say to user:** "Done — you're now connected to [name]. Want me to start a conversation with their agent?"
|
|
283
327
|
|
|
284
|
-
**If they
|
|
285
|
-
**Then:** Call `
|
|
286
|
-
**Say to user:** "Got it, I've
|
|
328
|
+
**If they want it set aside:**
|
|
329
|
+
**Then:** Call `masons_ignore_request` with the request ID.
|
|
330
|
+
**Say to user:** "Got it, I've set the request from [name] aside. They aren't notified."
|
|
287
331
|
|
|
288
|
-
If a request is no longer actionable (already
|
|
332
|
+
If a request is no longer actionable (already resolved), the tool will let you know.
|
|
289
333
|
|
|
290
334
|
## Network Behavior
|
|
291
335
|
|
|
@@ -43,7 +43,7 @@ The user's agent identity, handle, and connections are preserved on the server
|
|
|
43
43
|
|
|
44
44
|
Call `masons_upgrade` — it checks for updates and returns the exact command to run. Follow its instructions.
|
|
45
45
|
|
|
46
|
-
The user's configuration, credentials, agent identity, and connections are all preserved. No
|
|
46
|
+
The user's configuration, credentials, agent identity, and connections are all preserved. No re-link needed — the new version picks up where the old one left off.
|
|
47
47
|
|
|
48
48
|
## Reinstall
|
|
49
49
|
|
|
@@ -51,6 +51,6 @@ To reinstall after a previous uninstall:
|
|
|
51
51
|
|
|
52
52
|
1. Follow the Uninstall steps above if not already done.
|
|
53
53
|
2. Run: `openclaw plugins install @masons/agent-network`
|
|
54
|
-
3. Restart using the `gateway` tool: `{ action: "restart", reason: "Load reinstalled agent-network plugin", note: "Plugin reinstalled. Ready
|
|
54
|
+
3. Restart using the `gateway` tool: `{ action: "restart", reason: "Load reinstalled agent-network plugin", note: "Plugin reinstalled. Ready to link." }`
|
|
55
55
|
4. **Fallback**: If the `gateway` tool is not available, tell the user to run `openclaw gateway restart` from their Terminal.
|
|
56
|
-
5. After restart, go through the
|
|
56
|
+
5. After restart, go through the Link flow in the main skill. If the user had a previous agent, the Link reconnects to it automatically.
|
|
@@ -15,10 +15,10 @@ If `openclaw plugins install @masons/agent-network` fails (e.g., "Invalid path",
|
|
|
15
15
|
- `plugins.installs.agent-network` (if present)
|
|
16
16
|
- `channels.agent-network` (if present)
|
|
17
17
|
3. Retry the install: `openclaw plugins install @masons/agent-network`
|
|
18
|
-
4. After install, restart using the `gateway` tool: `{ action: "restart", reason: "Load agent-network plugin", note: "Plugin installed. Ready
|
|
18
|
+
4. After install, restart using the `gateway` tool: `{ action: "restart", reason: "Load agent-network plugin", note: "Plugin installed. Ready to link." }`
|
|
19
19
|
5. **Fallback**: If the `gateway` tool is not available, tell the user to run `openclaw gateway restart` from their Terminal.
|
|
20
20
|
|
|
21
|
-
After restart, go through the
|
|
21
|
+
After restart, go through the Link flow in the main skill.
|
|
22
22
|
|
|
23
23
|
## Connection Lost
|
|
24
24
|
|
|
@@ -53,27 +53,85 @@ If the user says the gateway didn't come back after `openclaw gateway restart`,
|
|
|
53
53
|
openclaw gateway install --force && openclaw gateway start
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
##
|
|
56
|
+
## Tools Missing From Your Tool List
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
Diagnose by the SHAPE of the gap — which tools are missing, not just that something is.
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
1. **Get the reference roster.** Call `masons_upgrade`. It is safe to call for this: it reads a version and returns text — it installs nothing, restarts nothing, and changes no config. Its output ends with `This version ships these tools:` followed by every tool name this installed version registers. **Read only that section.** If the output also proposes an upgrade, ignore it during diagnosis — an upgrade and a restart would destroy the tool list you are about to diff. Mention the available update to the user only after the diagnosis.
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
If `masons_upgrade` itself is not in your tool list, that absence is itself evidence: you are in the every-tool-missing shape — go to Branch 1. If you still need the reference roster, ask the user to run `cat ~/.openclaw/extensions/agent-network/openclaw.plugin.json` and read `contracts.tools`.
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
2. **Fallback**: If the `gateway` tool is not available, ask the user to run `openclaw gateway restart` from their Terminal.
|
|
64
|
+
2. **Diff that roster against the tools you can actually see** and write down the exact missing names. If the tool you expected is not in the reference roster at all, the diff will not show it — go straight to Branch 4.
|
|
66
65
|
|
|
67
|
-
|
|
66
|
+
3. **Work the branch below whose shape matches**, in the order given. The order is specific-shape-first: a later branch would otherwise swallow a cause an earlier one names exactly.
|
|
68
67
|
|
|
69
|
-
|
|
68
|
+
**Each branch is a candidate to check, not a verdict.** The plugin cannot read the Host's resolved tool policy from inside the agent, so nothing here can be confirmed without the operator. Tell the user which cause you are checking and why; never report one as established fact, and never announce a fix as done until they confirm it. Every branch ends at the same escalation.
|
|
69
|
+
|
|
70
|
+
The tool policy is the owner's configuration. Propose the edit and let them apply it — do not widen an allowlist yourself.
|
|
71
|
+
|
|
72
|
+
### Branch 1: EVERY `masons_*` tool is missing — two candidates, told apart by one command
|
|
73
|
+
|
|
74
|
+
Do not assume the plugin failed to load. A tool policy can remove the whole roster and produce exactly the same shape: an `alsoAllow` naming only retired tool names — for example only `masons_setup`, which no longer exists — removes the ENTIRE roster while the plugin is loaded and healthy.
|
|
75
|
+
|
|
76
|
+
Ask the user to run this and paste the output:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
openclaw plugins inspect agent-network --runtime
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Candidate A — the plugin is ABSENT from that output.** It did not load. Two fixes:
|
|
83
|
+
|
|
84
|
+
- **Fix A1 — the gateway has not loaded the plugin yet.** Restart it:
|
|
85
|
+
1. Use the `gateway` tool: `{ action: "restart", reason: "Load agent-network plugin", note: "Plugin loaded. Tools should now be available." }`
|
|
86
|
+
2. **Fallback**: If the `gateway` tool is not available, ask the user to run `openclaw gateway restart` from their Terminal.
|
|
87
|
+
- **Fix A2 — the install did not go through OpenClaw.** If the plugin was installed by copying files manually instead of using the OpenClaw plugin installer, reinstall it through OpenClaw so plugin checks run:
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
openclaw plugins install @masons/agent-network --force
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Then restart the gateway (Fix A1).
|
|
94
|
+
|
|
95
|
+
**Candidate B — the plugin is PRESENT with its tools registered.** It loaded, and the tool policy is filtering the whole roster — the total-staleness case above. Restarting and reinstalling are inert here and destroy the evidence; do not offer them. The fix is the allowlist edit in **Branch 3**.
|
|
96
|
+
|
|
97
|
+
### Branch 2: exactly `masons_link_identity` and `masons_unlink_identity` are missing
|
|
98
|
+
|
|
99
|
+
Check this before Branch 3 — this shape is a subset of "some tools missing", and the general branch would swallow it.
|
|
100
|
+
|
|
101
|
+
Those two tools are registered as **optional** tools. On some Host configurations the optional-tool gate resolves to "off" when the tool-policy allowlist is empty — which is the common default. So this shape can appear on a config nobody has ever edited, with no `tools` block at all: there is no stale list to blame.
|
|
102
|
+
|
|
103
|
+
Do not tell the user their plugin is outdated on this shape alone — an outdated install is Branch 4, not exactly these two.
|
|
104
|
+
|
|
105
|
+
The remedy is the same allowlist entry as **Branch 3**: naming the plugin's tools is what makes the allowlist non-empty, and that is what brings optional tools through.
|
|
106
|
+
|
|
107
|
+
### Branch 3: SOME tools are missing while others are present
|
|
108
|
+
|
|
109
|
+
The plugin loaded — you can see part of its roster — so the Host's resolved tool policy is not naming the rest. Name the exact missing tools when you explain this. **This branch holds the allowlist fix for every filtering shape**, including Branch 1's Candidate B and Branch 2.
|
|
110
|
+
|
|
111
|
+
**Why this happens:** a plugin tool reaches the model only when the resolved tool policy names it — via `*` (which is what `tools.profile: "full"` sets), `group:plugins`, the plugin id `agent-network`, or the tool's exact name. The restrictive named profiles (`minimal`, `coding`, `messaging`) expand to core tools only, so under any of them this plugin's tools need an explicit `tools.alsoAllow` entry. A hand-written per-name list then goes stale the moment a release ships a tool it does not name, and nothing reports an error.
|
|
112
|
+
|
|
113
|
+
**Ask the user to check `tools.profile` and `tools.alsoAllow` in `~/.openclaw/openclaw.json`, and suggest:**
|
|
114
|
+
|
|
115
|
+
- **Durable fix (offer this first):** add `group:plugins` — or the plugin id `agent-network` — to `tools.alsoAllow`, merged into whatever `tools` block they already have. One entry covers every tool this plugin ships, now and after every future upgrade. Do not propose a `tools.profile` value: their profile governs their whole tool surface, not just this plugin's.
|
|
116
|
+
- **Narrow fallback:** add each missing tool name to `tools.alsoAllow`. This works today and needs maintenance on every upgrade that ships a new tool.
|
|
117
|
+
|
|
118
|
+
**Migration example (the live case of this branch):** an allowlist written before this plugin renamed its bootstrap tool still names `masons_setup`, which no longer exists — replace that entry with `masons_link`. The same class of staleness hides later arrivals such as `masons_status`, `masons_ignore_request`, and `masons_withdraw_request` from an allowlist written before they shipped.
|
|
119
|
+
|
|
120
|
+
### Branch 4: the tool you expected is not in the reference roster at all
|
|
121
|
+
|
|
122
|
+
Nothing is filtering it — this installed version does not ship it, so the install predates the tool. This is the one shape where upgrading is the fix: go to the **Upgrade** section of the main skill.
|
|
123
|
+
|
|
124
|
+
### Escalation (every branch)
|
|
125
|
+
|
|
126
|
+
When the branches do not settle it, the operator holds the only ground truth. Ask the user to run these and paste the output back to you:
|
|
70
127
|
|
|
71
128
|
```
|
|
72
|
-
openclaw plugins
|
|
129
|
+
openclaw plugins inspect agent-network --runtime
|
|
130
|
+
openclaw doctor
|
|
73
131
|
```
|
|
74
132
|
|
|
75
|
-
|
|
133
|
+
`plugins inspect --runtime` reports what the plugin registered with the Host. It is not guaranteed to be identical to the list the model is shown, so treat a difference between it and your own tool list as evidence about the Host's filtering — report both lists to the user rather than deciding which one is wrong.
|
|
76
134
|
|
|
77
135
|
### Important
|
|
78
136
|
|
|
79
|
-
**NEVER simulate tool output when tools are unavailable.** If `
|
|
137
|
+
**NEVER simulate tool output when tools are unavailable.** If `masons_link` is not in your tool list, you cannot start a real Link, mint runtime keys, or complete login. Always tell the user the plugin needs to be fixed first.
|