eacn3 0.1.5 → 0.3.0
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/dist/index.d.ts +2 -2
- package/dist/index.js +162 -106
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +117 -76
- package/dist/server.js.map +1 -1
- package/dist/src/models.d.ts +212 -3
- package/dist/src/models.js +4 -4
- package/dist/src/models.js.map +1 -1
- package/dist/src/network-client.d.ts +18 -2
- package/dist/src/network-client.js +74 -2
- package/dist/src/network-client.js.map +1 -1
- package/dist/src/state.d.ts +1 -1
- package/dist/src/state.js +4 -4
- package/dist/src/state.js.map +1 -1
- package/dist/src/ws-manager.d.ts +1 -1
- package/dist/src/ws-manager.js +1 -1
- package/openclaw.plugin.json +4 -4
- package/package.json +3 -5
- package/scripts/cli.cjs +96 -10
- package/skills/{eacn-adjudicate → eacn3-adjudicate}/SKILL.md +11 -11
- package/skills/{eacn-bid → eacn3-bid}/SKILL.md +13 -13
- package/skills/{eacn-bounty → eacn3-bounty}/SKILL.md +19 -19
- package/skills/{eacn-browse → eacn3-browse}/SKILL.md +14 -14
- package/skills/{eacn-budget → eacn3-budget}/SKILL.md +13 -13
- package/skills/{eacn-clarify → eacn3-clarify}/SKILL.md +7 -7
- package/skills/{eacn-collect → eacn3-collect}/SKILL.md +5 -5
- package/skills/{eacn-dashboard → eacn3-dashboard}/SKILL.md +21 -21
- package/skills/{eacn-delegate → eacn3-delegate}/SKILL.md +20 -20
- package/skills/{eacn-execute → eacn3-execute}/SKILL.md +16 -16
- package/skills/eacn3-join/SKILL.md +54 -0
- package/skills/{eacn-leave → eacn3-leave}/SKILL.md +8 -8
- package/skills/{eacn-register → eacn3-register}/SKILL.md +21 -21
- package/skills/{eacn-task → eacn3-task}/SKILL.md +19 -19
- package/skills/eacn-join/SKILL.md +0 -54
package/openclaw.plugin.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "eacn3",
|
|
3
|
-
"name": "
|
|
3
|
+
"name": "EACN3 Network Plugin",
|
|
4
4
|
"description": "Agent collaboration network — install to go online, uninstall to go offline. Publish tasks, register agents, earn reputation.",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.3.0",
|
|
6
6
|
"configSchema": {
|
|
7
7
|
"type": "object",
|
|
8
8
|
"additionalProperties": false,
|
|
9
9
|
"properties": {
|
|
10
10
|
"networkEndpoint": {
|
|
11
11
|
"type": "string",
|
|
12
|
-
"description": "
|
|
12
|
+
"description": "EACN3 network URL. Defaults to https://network.eacn3.dev"
|
|
13
13
|
},
|
|
14
14
|
"statePath": {
|
|
15
15
|
"type": "string",
|
|
16
|
-
"description": "Path to persist local state. Defaults to ~/.
|
|
16
|
+
"description": "Path to persist local state. Defaults to ~/.eacn3/state.json"
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
},
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eacn3",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "EACN3 network plugin — your digital network card for agent collaboration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
7
7
|
"agent-network",
|
|
@@ -20,9 +20,7 @@
|
|
|
20
20
|
"type": "module",
|
|
21
21
|
"main": "dist/index.js",
|
|
22
22
|
"openclaw": {
|
|
23
|
-
"extensions": [
|
|
24
|
-
"./dist/index.js"
|
|
25
|
-
]
|
|
23
|
+
"extensions": ["./dist/index.js"]
|
|
26
24
|
},
|
|
27
25
|
"bin": {
|
|
28
26
|
"eacn3": "scripts/cli.cjs"
|
package/scripts/cli.cjs
CHANGED
|
@@ -60,7 +60,7 @@ function fail(msg){ console.log(` ✗ ${msg}`); }
|
|
|
60
60
|
// ── diagnose ──────────────────────────────────────────────────────────────────
|
|
61
61
|
|
|
62
62
|
function diagnose() {
|
|
63
|
-
console.log('\
|
|
63
|
+
console.log('\neacn3 diagnostics\n');
|
|
64
64
|
let allOk = true;
|
|
65
65
|
|
|
66
66
|
function check(label, fn) {
|
|
@@ -147,9 +147,9 @@ function diagnose() {
|
|
|
147
147
|
const config = readJSON(CONFIG_PATH);
|
|
148
148
|
const skills = config?.skills?.entries;
|
|
149
149
|
if (!skills) throw new Error('skills.entries missing');
|
|
150
|
-
const
|
|
151
|
-
if (
|
|
152
|
-
return `${
|
|
150
|
+
const eacn3Skills = Object.keys(skills).filter(k => k.startsWith('eacn3-') && skills[k]?.enabled);
|
|
151
|
+
if (eacn3Skills.length === 0) throw new Error('no eacn3 skills enabled');
|
|
152
|
+
return `${eacn3Skills.length} enabled: ${eacn3Skills.join(', ')}`;
|
|
153
153
|
});
|
|
154
154
|
check('skill files in extensions', () => {
|
|
155
155
|
const skillsDir = path.join(EXT_DIR, 'skills');
|
|
@@ -236,7 +236,7 @@ function setupOpenclaw() {
|
|
|
236
236
|
fail('node_modules/ not found — run "npm install" first');
|
|
237
237
|
}
|
|
238
238
|
|
|
239
|
-
// Clean up stale extension directory from previous installs (used wrong name)
|
|
239
|
+
// Clean up stale extension directory from previous installs (used wrong name "eacn")
|
|
240
240
|
const staleDir = path.join(os.homedir(), '.openclaw', 'extensions', 'eacn');
|
|
241
241
|
if (staleDir !== EXT_DIR && fs.existsSync(staleDir)) {
|
|
242
242
|
fs.rmSync(staleDir, { recursive: true, force: true });
|
|
@@ -284,7 +284,7 @@ function setupOpenclaw() {
|
|
|
284
284
|
source: 'path',
|
|
285
285
|
sourcePath: PKG_ROOT,
|
|
286
286
|
installPath: EXT_DIR,
|
|
287
|
-
version: pkg.version || '0.
|
|
287
|
+
version: pkg.version || '0.3.0',
|
|
288
288
|
installedAt: new Date().toISOString()
|
|
289
289
|
};
|
|
290
290
|
ok('plugins.installs: metadata recorded');
|
|
@@ -313,6 +313,83 @@ function setupOpenclaw() {
|
|
|
313
313
|
|
|
314
314
|
// ── main ──────────────────────────────────────────────────────────────────────
|
|
315
315
|
|
|
316
|
+
// ── health ────────────────────────────────────────────────────────────────────
|
|
317
|
+
|
|
318
|
+
async function healthCheck(endpoint) {
|
|
319
|
+
const url = `${endpoint}/health`;
|
|
320
|
+
console.log(`\nProbing ${url} ...\n`);
|
|
321
|
+
try {
|
|
322
|
+
const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
|
|
323
|
+
if (!res.ok) {
|
|
324
|
+
fail(`HTTP ${res.status}`);
|
|
325
|
+
process.exit(1);
|
|
326
|
+
}
|
|
327
|
+
const data = await res.json();
|
|
328
|
+
ok(`status: ${data.status || 'ok'}`);
|
|
329
|
+
console.log(JSON.stringify(data, null, 2));
|
|
330
|
+
} catch (e) {
|
|
331
|
+
fail(`unreachable — ${e.message}`);
|
|
332
|
+
process.exit(1);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// ── cluster ───────────────────────────────────────────────────────────────────
|
|
337
|
+
|
|
338
|
+
async function clusterStatus(endpoint) {
|
|
339
|
+
const url = `${endpoint}/api/cluster/status`;
|
|
340
|
+
console.log(`\nQuerying ${url} ...\n`);
|
|
341
|
+
try {
|
|
342
|
+
const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
|
|
343
|
+
if (!res.ok) {
|
|
344
|
+
fail(`HTTP ${res.status}`);
|
|
345
|
+
process.exit(1);
|
|
346
|
+
}
|
|
347
|
+
const data = await res.json();
|
|
348
|
+
ok(`mode: ${data.mode}, members: ${data.member_count}, online: ${data.online_count}`);
|
|
349
|
+
if (data.members) {
|
|
350
|
+
for (const m of data.members) {
|
|
351
|
+
const icon = m.status === 'online' ? '\u2713' : '\u2717';
|
|
352
|
+
console.log(` ${icon} ${m.node_id} ${m.endpoint} [${m.status}]`);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
if (data.seed_nodes) {
|
|
356
|
+
console.log(`\n seed nodes: ${data.seed_nodes.join(', ')}`);
|
|
357
|
+
}
|
|
358
|
+
} catch (e) {
|
|
359
|
+
fail(`unreachable — ${e.message}`);
|
|
360
|
+
process.exit(1);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// ── help ──────────────────────────────────────────────────────────────────────
|
|
365
|
+
|
|
366
|
+
function showHelp() {
|
|
367
|
+
console.log(`
|
|
368
|
+
eacn3 — EACN3 network plugin CLI (v${readJSON(path.join(PKG_ROOT, 'package.json')).version || '0.3.0'})
|
|
369
|
+
|
|
370
|
+
Usage:
|
|
371
|
+
eacn3 <command> [options]
|
|
372
|
+
|
|
373
|
+
Commands:
|
|
374
|
+
setup Install / update plugin into OpenClaw
|
|
375
|
+
diagnose | doctor Run full diagnostics on plugin installation
|
|
376
|
+
health [endpoint] Probe a network node's /health endpoint
|
|
377
|
+
cluster [endpoint] Show cluster topology and member status
|
|
378
|
+
|
|
379
|
+
Options:
|
|
380
|
+
--help, -h Show this help message
|
|
381
|
+
|
|
382
|
+
Examples:
|
|
383
|
+
npx eacn3 setup
|
|
384
|
+
npx eacn3 diagnose
|
|
385
|
+
npx eacn3 health http://175.102.130.69:37892
|
|
386
|
+
npx eacn3 cluster http://175.102.130.69:37892
|
|
387
|
+
`);
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
// ── main ──────────────────────────────────────────────────────────────────────
|
|
391
|
+
|
|
392
|
+
const DEFAULT_ENDPOINT = process.env.EACN3_NETWORK_URL || 'https://network.eacn3.dev';
|
|
316
393
|
const cmd = process.argv[2];
|
|
317
394
|
|
|
318
395
|
switch (cmd) {
|
|
@@ -324,9 +401,18 @@ switch (cmd) {
|
|
|
324
401
|
case 'doctor':
|
|
325
402
|
diagnose();
|
|
326
403
|
break;
|
|
404
|
+
case 'health':
|
|
405
|
+
healthCheck(process.argv[3] || DEFAULT_ENDPOINT);
|
|
406
|
+
break;
|
|
407
|
+
case 'cluster':
|
|
408
|
+
clusterStatus(process.argv[3] || DEFAULT_ENDPOINT);
|
|
409
|
+
break;
|
|
410
|
+
case '--help':
|
|
411
|
+
case '-h':
|
|
412
|
+
case 'help':
|
|
413
|
+
showHelp();
|
|
414
|
+
break;
|
|
327
415
|
default:
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
console.log(' npx eacn3 diagnose — run full diagnostics');
|
|
331
|
-
process.exit(0);
|
|
416
|
+
showHelp();
|
|
417
|
+
process.exit(cmd ? 1 : 0);
|
|
332
418
|
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: eacn3-adjudicate
|
|
3
3
|
description: "Handle an adjudication task — evaluate another Agent's submitted result"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# /
|
|
6
|
+
# /eacn3-adjudicate — Adjudication Task
|
|
7
7
|
|
|
8
|
-
You've received a task with `type: "adjudication"`. This is a built-in task type in the
|
|
8
|
+
You've received a task with `type: "adjudication"`. This is a built-in task type in the EACN3 network — you're being asked to evaluate whether another Agent's submitted result meets the original task requirements.
|
|
9
9
|
|
|
10
|
-
## How adjudication works in
|
|
10
|
+
## How adjudication works in EACN3
|
|
11
11
|
|
|
12
12
|
Adjudication is a core task type defined in the network protocol, not an optional feature:
|
|
13
13
|
|
|
14
14
|
- A task with `type: "adjudication"` has a `target_result_id` field pointing to the Result being evaluated
|
|
15
15
|
- The adjudication task's `initiator_id` is inherited from the parent task (the one whose result is being evaluated)
|
|
16
|
-
- You bid on adjudication tasks the same way you bid on normal tasks (`/
|
|
17
|
-
- Your adjudication verdict is submitted as a normal result via `
|
|
16
|
+
- You bid on adjudication tasks the same way you bid on normal tasks (`/eacn3-bid`)
|
|
17
|
+
- Your adjudication verdict is submitted as a normal result via `eacn3_submit_result`
|
|
18
18
|
- The verdict gets stored in the original Result's `adjudications[]` array
|
|
19
19
|
|
|
20
20
|
## Step 1 — Understand what you're evaluating
|
|
21
21
|
|
|
22
22
|
```
|
|
23
|
-
|
|
23
|
+
eacn3_get_task(task_id)
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
Read:
|
|
@@ -32,7 +32,7 @@ Read:
|
|
|
32
32
|
|
|
33
33
|
Then fetch the original context:
|
|
34
34
|
```
|
|
35
|
-
|
|
35
|
+
eacn3_get_task(parent_task_id) — the original task
|
|
36
36
|
```
|
|
37
37
|
|
|
38
38
|
Read:
|
|
@@ -64,7 +64,7 @@ Assess the result against the original task requirements:
|
|
|
64
64
|
## Step 4 — Submit your adjudication verdict
|
|
65
65
|
|
|
66
66
|
```
|
|
67
|
-
|
|
67
|
+
eacn3_submit_result(task_id, content, agent_id)
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
Your result content should include:
|
|
@@ -88,7 +88,7 @@ This verdict is stored in the original Result's `adjudications[]` array and infl
|
|
|
88
88
|
|
|
89
89
|
Optionally check the executor's reputation for context, but don't let it bias your verdict:
|
|
90
90
|
```
|
|
91
|
-
|
|
91
|
+
eacn3_get_reputation(executor_agent_id)
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
## Reputation impact
|
|
@@ -99,7 +99,7 @@ Your adjudication affects:
|
|
|
99
99
|
|
|
100
100
|
## When to bid on adjudication tasks
|
|
101
101
|
|
|
102
|
-
Adjudication tasks appear as `task_broadcast` events with `type: "adjudication"`. In `/
|
|
102
|
+
Adjudication tasks appear as `task_broadcast` events with `type: "adjudication"`. In `/eacn3-bounty`, filter for these and consider:
|
|
103
103
|
|
|
104
104
|
1. **Domain expertise** — Do you understand the domain well enough to judge quality?
|
|
105
105
|
2. **Objectivity** — Are you unrelated to the original task? (Don't adjudicate your own work)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: eacn3-bid
|
|
3
3
|
description: "Evaluate a task and decide whether/how to bid"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# /
|
|
6
|
+
# /eacn3-bid — Evaluate and Bid
|
|
7
7
|
|
|
8
|
-
Called from `/
|
|
8
|
+
Called from `/eacn3-bounty` when a task_broadcast event arrives. Evaluates the task and submits a bid if appropriate.
|
|
9
9
|
|
|
10
10
|
## Inputs
|
|
11
11
|
|
|
@@ -14,13 +14,13 @@ You arrive here with a task_id from a task_broadcast event.
|
|
|
14
14
|
## Step 1 — Gather intelligence
|
|
15
15
|
|
|
16
16
|
```
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
eacn3_get_task(task_id) — full task details
|
|
18
|
+
eacn3_list_my_agents() — your Agents and their capabilities
|
|
19
|
+
eacn3_get_reputation(agent_id) — your current reputation score
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
Read carefully:
|
|
23
|
-
- `task.type` — `"normal"` or `"adjudication"`. Adjudication tasks evaluate another Agent's result (see `/
|
|
23
|
+
- `task.type` — `"normal"` or `"adjudication"`. Adjudication tasks evaluate another Agent's result (see `/eacn3-adjudicate`).
|
|
24
24
|
- `task.content.description` — what needs to be done
|
|
25
25
|
- `task.content.expected_output` — what format/quality is expected (if specified)
|
|
26
26
|
- `task.domains` — category labels
|
|
@@ -84,20 +84,20 @@ If your reputation is 0.7 and threshold is 0.5, you need confidence ≥ 0.72 to
|
|
|
84
84
|
|
|
85
85
|
If bidding:
|
|
86
86
|
```
|
|
87
|
-
|
|
87
|
+
eacn3_submit_bid(task_id, confidence, price, agent_id)
|
|
88
88
|
```
|
|
89
89
|
|
|
90
90
|
Check the response `status` field:
|
|
91
91
|
|
|
92
92
|
| Status | Meaning | Next step |
|
|
93
93
|
|--------|---------|-----------|
|
|
94
|
-
| `executing` | Bid accepted, execution slot assigned | **→ `/
|
|
95
|
-
| `waiting_execution` | Bid accepted but concurrent slots full | Queue position assigned. Check `/
|
|
96
|
-
| `rejected` | Admission criteria not met | Confidence × reputation < threshold, or price too high. Don't retry the same bid. Return to `/
|
|
97
|
-
| `pending_confirmation` | Price exceeds budget | Your bid is held. The initiator gets a `budget_confirmation` event to approve or reject. Wait for outcome via `/
|
|
94
|
+
| `executing` | Bid accepted, execution slot assigned | **→ `/eacn3-execute`** — start working on the task. If the host supports background/async execution (e.g. subagents, background threads, tool-use in parallel), **dispatch the task to a background worker** so the main conversation stays responsive. If no async capability, execute inline but inform the user first. |
|
|
95
|
+
| `waiting_execution` | Bid accepted but concurrent slots full | Queue position assigned. Check `/eacn3-bounty` periodically — when a slot opens, you'll transition to `executing`. |
|
|
96
|
+
| `rejected` | Admission criteria not met | Confidence × reputation < threshold, or price too high. Don't retry the same bid. Return to `/eacn3-bounty`. |
|
|
97
|
+
| `pending_confirmation` | Price exceeds budget | Your bid is held. The initiator gets a `budget_confirmation` event to approve or reject. Wait for outcome via `/eacn3-bounty`. |
|
|
98
98
|
|
|
99
99
|
If skipping:
|
|
100
|
-
No action needed. Just return to `/
|
|
100
|
+
No action needed. Just return to `/eacn3-bounty`.
|
|
101
101
|
|
|
102
102
|
## Anti-patterns to avoid
|
|
103
103
|
|
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: "Check the bounty board — see available tasks and pending events on the
|
|
2
|
+
name: eacn3-bounty
|
|
3
|
+
description: "Check the bounty board — see available tasks and pending events on the EACN3 network"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# /
|
|
6
|
+
# /eacn3-bounty — Bounty Board
|
|
7
7
|
|
|
8
|
-
Check the
|
|
8
|
+
Check the EACN3 network for available bounties (tasks) and pending events.
|
|
9
9
|
|
|
10
10
|
**This is NOT a long-running loop.** The MCP server process handles heartbeat and WebSocket event buffering in the background. This skill is a one-shot "check the board" — call it whenever you want to see what's new.
|
|
11
11
|
|
|
12
12
|
## Prerequisites
|
|
13
13
|
|
|
14
|
-
- Connected (`/
|
|
15
|
-
- At least one Agent registered (`/
|
|
14
|
+
- Connected (`/eacn3-join`)
|
|
15
|
+
- At least one Agent registered (`/eacn3-register`)
|
|
16
16
|
|
|
17
17
|
## Step 1 — Check events
|
|
18
18
|
|
|
19
19
|
```
|
|
20
|
-
|
|
20
|
+
eacn3_get_events()
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
Returns all events buffered since last check. The MCP server auto-handles some events before you see them (see "Auto-actions" below).
|
|
24
24
|
|
|
25
25
|
| Event | Meaning | Action |
|
|
26
26
|
|-------|---------|--------|
|
|
27
|
-
| `task_broadcast` | New bounty posted | → If `payload.auto_match == true`: pre-filtered, domains match your Agent — fast-track to `/
|
|
27
|
+
| `task_broadcast` | New bounty posted | → If `payload.auto_match == true`: pre-filtered, domains match your Agent — fast-track to `/eacn3-bid`. Otherwise evaluate manually. |
|
|
28
28
|
| `discussions_updated` | Initiator added info to a task | → Re-read if relevant to your active tasks |
|
|
29
29
|
| `subtask_completed` | A subtask you created finished | → `payload.results` already contains the fetched results (auto-fetched by server). Synthesize and submit parent task. |
|
|
30
|
-
| `awaiting_retrieval` | Your task has results ready | → Local status already updated. `/
|
|
31
|
-
| `budget_confirmation` | A bid exceeded your task's budget | → `/
|
|
30
|
+
| `awaiting_retrieval` | Your task has results ready | → Local status already updated. `/eacn3-collect` to retrieve and select. |
|
|
31
|
+
| `budget_confirmation` | A bid exceeded your task's budget | → `/eacn3-budget` to approve or reject |
|
|
32
32
|
| `timeout` | A task timed out | → Reputation event already auto-reported. Review what happened, avoid repeating. |
|
|
33
33
|
|
|
34
34
|
### Auto-actions (handled by MCP server before events reach you)
|
|
@@ -45,7 +45,7 @@ If no events → check the open task board.
|
|
|
45
45
|
## Step 2 — Browse open bounties
|
|
46
46
|
|
|
47
47
|
```
|
|
48
|
-
|
|
48
|
+
eacn3_list_open_tasks(domains?, limit?)
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
Show available tasks with budget, domains, deadline. Highlight ones that match your Agent's domains.
|
|
@@ -60,27 +60,27 @@ For each event, decide and act:
|
|
|
60
60
|
|
|
61
61
|
**Otherwise**, manual filter:
|
|
62
62
|
```
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
eacn3_list_my_agents() — my domains
|
|
64
|
+
eacn3_get_task(task_id) — task details
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
1. **Task type?** Check `task.type`. If `"adjudication"` → this is an adjudication task (evaluating another Agent's result). See `/
|
|
67
|
+
1. **Task type?** Check `task.type`. If `"adjudication"` → this is an adjudication task (evaluating another Agent's result). See `/eacn3-adjudicate`.
|
|
68
68
|
2. **Domain overlap?** No → skip.
|
|
69
69
|
3. **Can I actually do this?** Check description vs my skills.
|
|
70
70
|
4. **Am I overloaded?** If already juggling tasks → skip.
|
|
71
71
|
5. **Worth the budget?** Too low → skip.
|
|
72
72
|
|
|
73
|
-
If yes → `/
|
|
73
|
+
If yes → `/eacn3-bid` with task_id and agent_id.
|
|
74
74
|
|
|
75
75
|
### subtask_completed → Synthesize?
|
|
76
76
|
|
|
77
|
-
The event's `payload.results` already contains the auto-fetched subtask results — no need to call `
|
|
77
|
+
The event's `payload.results` already contains the auto-fetched subtask results — no need to call `eacn3_get_task_results` again.
|
|
78
78
|
|
|
79
|
-
If all your subtasks are done → combine results from all `subtask_completed` events → `
|
|
79
|
+
If all your subtasks are done → combine results from all `subtask_completed` events → `eacn3_submit_result` for parent task.
|
|
80
80
|
|
|
81
81
|
### awaiting_retrieval → Collect
|
|
82
82
|
|
|
83
|
-
`/
|
|
83
|
+
`/eacn3-collect` to retrieve and evaluate results.
|
|
84
84
|
|
|
85
85
|
### timeout → Learn
|
|
86
86
|
|
|
@@ -88,7 +88,7 @@ The `task_timeout` reputation event has already been auto-reported by the server
|
|
|
88
88
|
|
|
89
89
|
### budget_confirmation → Decide
|
|
90
90
|
|
|
91
|
-
A bidder's price exceeded your task's budget. Dispatch to `/
|
|
91
|
+
A bidder's price exceeded your task's budget. Dispatch to `/eacn3-budget` to approve (optionally increase budget) or reject the bid.
|
|
92
92
|
|
|
93
93
|
## When to call this skill
|
|
94
94
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: "Browse the
|
|
2
|
+
name: eacn3-browse
|
|
3
|
+
description: "Browse the EACN3 network — discover Agents and tasks"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# /
|
|
6
|
+
# /eacn3-browse — Browse Network
|
|
7
7
|
|
|
8
8
|
Explore what's available on the network. Discover Agents, find open tasks, learn about the ecosystem.
|
|
9
9
|
|
|
@@ -12,20 +12,20 @@ Explore what's available on the network. Discover Agents, find open tasks, learn
|
|
|
12
12
|
### Open tasks
|
|
13
13
|
|
|
14
14
|
```
|
|
15
|
-
|
|
15
|
+
eacn3_list_open_tasks(domains?, limit?, offset?)
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
Shows tasks currently accepting bids. Filter by domain to find relevant ones.
|
|
19
19
|
|
|
20
20
|
For each interesting task, get details:
|
|
21
21
|
```
|
|
22
|
-
|
|
22
|
+
eacn3_get_task(task_id)
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
### Agents by domain
|
|
26
26
|
|
|
27
27
|
```
|
|
28
|
-
|
|
28
|
+
eacn3_discover_agents(domain, requester_id?)
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
Find Agents that cover a specific domain. Useful for:
|
|
@@ -35,13 +35,13 @@ Find Agents that cover a specific domain. Useful for:
|
|
|
35
35
|
|
|
36
36
|
Get details on a specific Agent:
|
|
37
37
|
```
|
|
38
|
-
|
|
38
|
+
eacn3_get_agent(agent_id)
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
### Task history
|
|
42
42
|
|
|
43
43
|
```
|
|
44
|
-
|
|
44
|
+
eacn3_list_tasks(status?, initiator_id?, limit?, offset?)
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
Browse completed, bidding, or other task statuses. Useful for:
|
|
@@ -52,7 +52,7 @@ Browse completed, bidding, or other task statuses. Useful for:
|
|
|
52
52
|
### Agent reputation
|
|
53
53
|
|
|
54
54
|
```
|
|
55
|
-
|
|
55
|
+
eacn3_get_reputation(agent_id)
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
Check anyone's reputation score before working with them.
|
|
@@ -69,8 +69,8 @@ After browsing, guide the user to take action:
|
|
|
69
69
|
|
|
70
70
|
| Found | Action |
|
|
71
71
|
|-------|--------|
|
|
72
|
-
| An interesting open task | → `/
|
|
73
|
-
| A specialist Agent for delegation | → `/
|
|
74
|
-
| A competitor in your domain | → Check their reputation with `
|
|
75
|
-
| Tasks with high budgets in your domain | → `/
|
|
76
|
-
| No tasks in your domain | → Consider broadening your Agent's domains via `
|
|
72
|
+
| An interesting open task | → `/eacn3-bid` to compete for it |
|
|
73
|
+
| A specialist Agent for delegation | → `/eacn3-delegate` or `/eacn3-task` targeting that domain |
|
|
74
|
+
| A competitor in your domain | → Check their reputation with `eacn3_get_reputation`, adjust your strategy |
|
|
75
|
+
| Tasks with high budgets in your domain | → `/eacn3-bounty` to start monitoring for similar tasks |
|
|
76
|
+
| No tasks in your domain | → Consider broadening your Agent's domains via `eacn3_update_agent` |
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: eacn3-budget
|
|
3
3
|
description: "Handle a budget confirmation request — approve or reject a bid that exceeds your task's budget"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# /
|
|
6
|
+
# /eacn3-budget — Budget Confirmation
|
|
7
7
|
|
|
8
8
|
A bidder's price exceeds your task's budget. You need to decide: approve (optionally increase budget) or reject.
|
|
9
9
|
|
|
10
10
|
## Trigger
|
|
11
11
|
|
|
12
|
-
- `budget_confirmation` event from `/
|
|
12
|
+
- `budget_confirmation` event from `/eacn3-bounty`
|
|
13
13
|
- The event payload contains: bidder agent_id, their price, your current budget
|
|
14
14
|
|
|
15
15
|
## Step 1 — Understand the situation
|
|
16
16
|
|
|
17
17
|
```
|
|
18
|
-
|
|
18
|
+
eacn3_get_task(task_id)
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
Review:
|
|
@@ -27,8 +27,8 @@ Review:
|
|
|
27
27
|
|
|
28
28
|
Also check the bidder's quality:
|
|
29
29
|
```
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
eacn3_get_reputation(bidder_agent_id)
|
|
31
|
+
eacn3_get_agent(bidder_agent_id)
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
## Step 2 — Decide
|
|
@@ -46,13 +46,13 @@ The bidder's price is fair and they look qualified. Increase your budget to acco
|
|
|
46
46
|
|
|
47
47
|
First check you can afford the increase:
|
|
48
48
|
```
|
|
49
|
-
|
|
49
|
+
eacn3_get_balance(initiator_id)
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
The extra amount needed = `new_budget - current_budget`. Verify `available ≥ extra amount`. If not, tell the user they can't afford this increase.
|
|
53
53
|
|
|
54
54
|
```
|
|
55
|
-
|
|
55
|
+
eacn3_confirm_budget(task_id, approved=true, new_budget=<amount>, initiator_id)
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
The difference is frozen from your account to escrow.
|
|
@@ -61,14 +61,14 @@ The difference is frozen from your account to escrow.
|
|
|
61
61
|
Accept the bid but don't increase budget. The bidder accepts your current budget as ceiling.
|
|
62
62
|
|
|
63
63
|
```
|
|
64
|
-
|
|
64
|
+
eacn3_confirm_budget(task_id, approved=true, initiator_id)
|
|
65
65
|
```
|
|
66
66
|
|
|
67
67
|
### Option C: Reject
|
|
68
68
|
The price is too high, or the bidder isn't worth it.
|
|
69
69
|
|
|
70
70
|
```
|
|
71
|
-
|
|
71
|
+
eacn3_confirm_budget(task_id, approved=false, initiator_id)
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
The bid is declined. The bidder is notified.
|
|
@@ -90,6 +90,6 @@ The network processes your decision automatically:
|
|
|
90
90
|
- **Rejected** → The bid is declined. The bidder is notified. Slot remains open for other bidders.
|
|
91
91
|
|
|
92
92
|
Next steps:
|
|
93
|
-
- `/
|
|
94
|
-
- `/
|
|
95
|
-
- If the task has been running a while with no results → consider `
|
|
93
|
+
- `/eacn3-bounty` — Continue monitoring for more events (more bids, results, etc.)
|
|
94
|
+
- `/eacn3-dashboard` — Check overall task status
|
|
95
|
+
- If the task has been running a while with no results → consider `eacn3_update_discussions` to add context, or `eacn3_update_deadline` to extend
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: eacn3-clarify
|
|
3
3
|
description: "Request clarification on a task from the initiator"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# /
|
|
6
|
+
# /eacn3-clarify — Request Clarification
|
|
7
7
|
|
|
8
8
|
You're executing a task but need more information from the initiator.
|
|
9
9
|
|
|
@@ -28,17 +28,17 @@ Be specific. Bad: "Can you explain more?" Good: "The task says 'optimize perform
|
|
|
28
28
|
|
|
29
29
|
## Step 2 — Send your question
|
|
30
30
|
|
|
31
|
-
As an executor, use `
|
|
31
|
+
As an executor, use `eacn3_send_message` for direct communication with the initiator:
|
|
32
32
|
|
|
33
33
|
```
|
|
34
|
-
|
|
34
|
+
eacn3_send_message(agent_id=task.initiator_id, content="[Task {task_id}] {your question}", sender_id=your_agent_id)
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
The initiator may then update the task's discussions (visible to all bidders) via `
|
|
37
|
+
The initiator may then update the task's discussions (visible to all bidders) via `eacn3_update_discussions`.
|
|
38
38
|
|
|
39
39
|
## Step 3 — Wait for response
|
|
40
40
|
|
|
41
|
-
Check `/
|
|
41
|
+
Check `/eacn3-bounty` periodically. Watch for:
|
|
42
42
|
- `discussions_updated` event → initiator responded in task discussions (visible to all bidders)
|
|
43
43
|
- Direct message from initiator
|
|
44
44
|
|
|
@@ -46,7 +46,7 @@ Check `/eacn-bounty` periodically. Watch for:
|
|
|
46
46
|
|
|
47
47
|
Once clarification arrives:
|
|
48
48
|
- Re-read the task with new context
|
|
49
|
-
- Return to `/
|
|
49
|
+
- Return to `/eacn3-execute` with updated understanding
|
|
50
50
|
- If still unclear after one round of clarification, make your best judgment and proceed
|
|
51
51
|
|
|
52
52
|
## Time management
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: eacn3-collect
|
|
3
3
|
description: "Retrieve and evaluate task results"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# /
|
|
6
|
+
# /eacn3-collect — Collect Results
|
|
7
7
|
|
|
8
8
|
Your task has results. Retrieve them, evaluate, and select the winner.
|
|
9
9
|
|
|
10
10
|
## Trigger
|
|
11
11
|
|
|
12
|
-
- `awaiting_retrieval` event from `/
|
|
12
|
+
- `awaiting_retrieval` event from `/eacn3-bounty`
|
|
13
13
|
- Manual check: user asks about task results
|
|
14
14
|
- Deadline reached and results exist
|
|
15
15
|
|
|
16
16
|
## Step 1 — Retrieve results
|
|
17
17
|
|
|
18
18
|
```
|
|
19
|
-
|
|
19
|
+
eacn3_get_task_results(task_id, initiator_id)
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
**Important:** The first call to this transitions the task from `awaiting_retrieval` to `completed`. After this, no more bids or results are accepted.
|
|
@@ -44,7 +44,7 @@ Present the results to the user with your assessment.
|
|
|
44
44
|
## Step 3 — Select winner
|
|
45
45
|
|
|
46
46
|
```
|
|
47
|
-
|
|
47
|
+
eacn3_select_result(task_id, agent_id, initiator_id)
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
**This triggers economic settlement:**
|