eacn3 0.1.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 +7 -0
- package/dist/index.js +574 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +8 -0
- package/dist/server.js +640 -0
- package/dist/server.js.map +1 -0
- package/dist/src/models.d.ts +161 -0
- package/dist/src/models.js +14 -0
- package/dist/src/models.js.map +1 -0
- package/dist/src/network-client.d.ts +96 -0
- package/dist/src/network-client.js +228 -0
- package/dist/src/network-client.js.map +1 -0
- package/dist/src/state.d.ts +33 -0
- package/dist/src/state.js +113 -0
- package/dist/src/state.js.map +1 -0
- package/dist/src/ws-manager.d.ts +30 -0
- package/dist/src/ws-manager.js +150 -0
- package/dist/src/ws-manager.js.map +1 -0
- package/openclaw.plugin.json +21 -0
- package/package.json +52 -0
- package/scripts/cli.cjs +332 -0
- package/scripts/postinstall.cjs +62 -0
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,574 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EACN — Native OpenClaw plugin entry point.
|
|
3
|
+
*
|
|
4
|
+
* Registers the same 32 tools as server.ts but via api.registerTool().
|
|
5
|
+
* All logic delegates to the same src/ modules.
|
|
6
|
+
*/
|
|
7
|
+
import * as state from "./src/state.js";
|
|
8
|
+
import * as net from "./src/network-client.js";
|
|
9
|
+
import * as ws from "./src/ws-manager.js";
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Heartbeat
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
let heartbeatInterval = null;
|
|
14
|
+
function startHeartbeat() {
|
|
15
|
+
if (heartbeatInterval)
|
|
16
|
+
return;
|
|
17
|
+
heartbeatInterval = setInterval(async () => {
|
|
18
|
+
try {
|
|
19
|
+
await net.heartbeat();
|
|
20
|
+
}
|
|
21
|
+
catch { /* silent */ }
|
|
22
|
+
}, 60_000);
|
|
23
|
+
}
|
|
24
|
+
function stopHeartbeat() {
|
|
25
|
+
if (heartbeatInterval) {
|
|
26
|
+
clearInterval(heartbeatInterval);
|
|
27
|
+
heartbeatInterval = null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Helper
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
function ok(data) {
|
|
34
|
+
return { content: [{ type: "text", text: JSON.stringify(data) }] };
|
|
35
|
+
}
|
|
36
|
+
function err(message) {
|
|
37
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: message }) }] };
|
|
38
|
+
}
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// WS Event Callbacks — auto-actions when events arrive
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
function registerEventCallbacks() {
|
|
43
|
+
ws.setEventCallback((agentId, event) => {
|
|
44
|
+
const taskId = event.task_id;
|
|
45
|
+
switch (event.type) {
|
|
46
|
+
case "awaiting_retrieval":
|
|
47
|
+
state.updateTaskStatus(taskId, "awaiting_retrieval");
|
|
48
|
+
break;
|
|
49
|
+
case "subtask_completed": {
|
|
50
|
+
const subtaskId = event.payload?.subtask_id;
|
|
51
|
+
if (subtaskId) {
|
|
52
|
+
net.getTaskResults(subtaskId, agentId)
|
|
53
|
+
.then((res) => {
|
|
54
|
+
state.pushEvents([{
|
|
55
|
+
type: "subtask_completed",
|
|
56
|
+
task_id: taskId,
|
|
57
|
+
payload: { subtask_id: subtaskId, results: res.results },
|
|
58
|
+
received_at: Date.now(),
|
|
59
|
+
}]);
|
|
60
|
+
})
|
|
61
|
+
.catch(() => { });
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
case "timeout":
|
|
66
|
+
state.updateTaskStatus(taskId, "no_one");
|
|
67
|
+
net.reportEvent(agentId, "task_timeout").catch(() => { });
|
|
68
|
+
break;
|
|
69
|
+
case "budget_confirmation":
|
|
70
|
+
break;
|
|
71
|
+
case "task_broadcast":
|
|
72
|
+
autoBidEvaluate(agentId, event).catch(() => { });
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
async function autoBidEvaluate(agentId, event) {
|
|
78
|
+
const agent = state.getAgent(agentId);
|
|
79
|
+
if (!agent)
|
|
80
|
+
return;
|
|
81
|
+
const taskId = event.task_id;
|
|
82
|
+
const payload = event.payload;
|
|
83
|
+
const taskDomains = payload?.domains ?? [];
|
|
84
|
+
const overlap = taskDomains.some((d) => agent.domains.includes(d));
|
|
85
|
+
if (!overlap)
|
|
86
|
+
return;
|
|
87
|
+
if (agent.capabilities?.max_concurrent_tasks) {
|
|
88
|
+
const activeTasks = Object.values(state.getState().local_tasks).filter((t) => t.role === "executor" && t.status !== "completed" && t.status !== "no_one");
|
|
89
|
+
if (activeTasks.length >= agent.capabilities.max_concurrent_tasks)
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
state.pushEvents([{
|
|
93
|
+
type: "task_broadcast",
|
|
94
|
+
task_id: taskId,
|
|
95
|
+
payload: { ...payload, auto_match: true, matched_agent: agentId },
|
|
96
|
+
received_at: Date.now(),
|
|
97
|
+
}]);
|
|
98
|
+
}
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
// Plugin entry
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
export default function (api) {
|
|
103
|
+
// Load state and register event callbacks
|
|
104
|
+
state.load();
|
|
105
|
+
registerEventCallbacks();
|
|
106
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
107
|
+
// Server Management (4)
|
|
108
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
109
|
+
// #1 eacn_connect
|
|
110
|
+
api.registerTool({
|
|
111
|
+
name: "eacn_connect",
|
|
112
|
+
description: "Connect to EACN network. Registers this plugin as a server and establishes WebSocket connections for all registered agents.",
|
|
113
|
+
parameters: {
|
|
114
|
+
type: "object",
|
|
115
|
+
properties: {
|
|
116
|
+
network_endpoint: { type: "string", description: "Network URL. Defaults to https://network.eacn.dev" },
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
async execute(_id, params) {
|
|
120
|
+
const endpoint = params.network_endpoint ?? "https://network.eacn.dev";
|
|
121
|
+
const s = state.getState();
|
|
122
|
+
s.network_endpoint = endpoint;
|
|
123
|
+
const res = await net.registerServer("0.1.0", "plugin://local", "plugin-user");
|
|
124
|
+
s.server_card = { server_id: res.server_id, version: "0.1.0", endpoint: "plugin://local", owner: "plugin-user", status: "online" };
|
|
125
|
+
state.save();
|
|
126
|
+
startHeartbeat();
|
|
127
|
+
for (const agentId of Object.keys(s.agents))
|
|
128
|
+
ws.connect(agentId);
|
|
129
|
+
return ok({ connected: true, server_id: res.server_id, network_endpoint: endpoint, agents_online: Object.keys(s.agents).length });
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
// #2 eacn_disconnect
|
|
133
|
+
api.registerTool({
|
|
134
|
+
name: "eacn_disconnect",
|
|
135
|
+
description: "Disconnect from EACN network. Unregisters server and closes all WebSocket connections.",
|
|
136
|
+
parameters: { type: "object", properties: {} },
|
|
137
|
+
async execute() {
|
|
138
|
+
stopHeartbeat();
|
|
139
|
+
ws.disconnectAll();
|
|
140
|
+
try {
|
|
141
|
+
await net.unregisterServer();
|
|
142
|
+
}
|
|
143
|
+
catch { /* */ }
|
|
144
|
+
const s = state.getState();
|
|
145
|
+
s.server_card = null;
|
|
146
|
+
s.agents = {};
|
|
147
|
+
state.save();
|
|
148
|
+
return ok({ disconnected: true });
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
// #3 eacn_heartbeat
|
|
152
|
+
api.registerTool({
|
|
153
|
+
name: "eacn_heartbeat",
|
|
154
|
+
description: "Send heartbeat to network. Background interval auto-sends every 60s; this is for manual trigger.",
|
|
155
|
+
parameters: { type: "object", properties: {} },
|
|
156
|
+
async execute() { return ok(await net.heartbeat()); },
|
|
157
|
+
});
|
|
158
|
+
// #4 eacn_server_info
|
|
159
|
+
api.registerTool({
|
|
160
|
+
name: "eacn_server_info",
|
|
161
|
+
description: "Get current server status: connection state, registered agents, local tasks.",
|
|
162
|
+
parameters: { type: "object", properties: {} },
|
|
163
|
+
async execute() {
|
|
164
|
+
const s = state.getState();
|
|
165
|
+
if (!s.server_card)
|
|
166
|
+
return err("Not connected");
|
|
167
|
+
let remote;
|
|
168
|
+
try {
|
|
169
|
+
remote = await net.getServer(s.server_card.server_id);
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
remote = null;
|
|
173
|
+
}
|
|
174
|
+
return ok({ server_card: s.server_card, network_endpoint: s.network_endpoint, agents_count: Object.keys(s.agents).length, agents: Object.keys(s.agents), tasks_count: Object.keys(s.local_tasks).length, remote_status: remote?.status ?? "unknown" });
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
178
|
+
// Agent Management (7)
|
|
179
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
180
|
+
// #5 eacn_register_agent
|
|
181
|
+
api.registerTool({
|
|
182
|
+
name: "eacn_register_agent",
|
|
183
|
+
description: "Register an Agent on the network. Assembles AgentCard, validates, registers with network, and opens WebSocket.",
|
|
184
|
+
parameters: {
|
|
185
|
+
type: "object",
|
|
186
|
+
properties: {
|
|
187
|
+
name: { type: "string", description: "Agent display name" },
|
|
188
|
+
description: { type: "string", description: "What this Agent does" },
|
|
189
|
+
domains: { type: "array", items: { type: "string" }, description: "Capability domains" },
|
|
190
|
+
skills: { type: "array", items: { type: "object", properties: { id: { type: "string" }, name: { type: "string" }, description: { type: "string" }, tags: { type: "array", items: { type: "string" } }, parameters: { type: "object" } } }, description: "Agent skills" },
|
|
191
|
+
capabilities: { type: "object", properties: { max_concurrent_tasks: { type: "number", description: "Max tasks simultaneously (0 = unlimited)" }, concurrent: { type: "boolean", description: "Whether Agent supports concurrent execution" } }, description: "Agent capacity limits" },
|
|
192
|
+
agent_type: { type: "string", enum: ["executor", "planner"], description: "Defaults to executor" },
|
|
193
|
+
agent_id: { type: "string", description: "Custom agent ID. Auto-generated if omitted." },
|
|
194
|
+
},
|
|
195
|
+
required: ["name", "description", "domains"],
|
|
196
|
+
},
|
|
197
|
+
async execute(_id, params) {
|
|
198
|
+
const s = state.getState();
|
|
199
|
+
if (!s.server_card)
|
|
200
|
+
return err("Not connected. Call eacn_connect first.");
|
|
201
|
+
if (!params.name?.trim())
|
|
202
|
+
return err("name cannot be empty");
|
|
203
|
+
if (!params.domains?.length)
|
|
204
|
+
return err("domains cannot be empty");
|
|
205
|
+
const agentId = params.agent_id ?? `agent-${Date.now().toString(36)}`;
|
|
206
|
+
const card = {
|
|
207
|
+
agent_id: agentId, name: params.name, agent_type: params.agent_type ?? "executor",
|
|
208
|
+
domains: params.domains, skills: params.skills ?? [], capabilities: params.capabilities,
|
|
209
|
+
url: `plugin://local/agents/${agentId}`, server_id: s.server_card.server_id,
|
|
210
|
+
network_id: "", description: params.description,
|
|
211
|
+
};
|
|
212
|
+
const res = await net.registerAgent(card);
|
|
213
|
+
state.addAgent(card);
|
|
214
|
+
ws.connect(agentId);
|
|
215
|
+
return ok({ registered: true, agent_id: agentId, seeds: res.seeds, domains: params.domains });
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
// #6 eacn_get_agent
|
|
219
|
+
api.registerTool({
|
|
220
|
+
name: "eacn_get_agent",
|
|
221
|
+
description: "Get any Agent's details (AgentCard) by ID.",
|
|
222
|
+
parameters: { type: "object", properties: { agent_id: { type: "string" } }, required: ["agent_id"] },
|
|
223
|
+
async execute(_id, params) {
|
|
224
|
+
const local = state.getAgent(params.agent_id);
|
|
225
|
+
if (local)
|
|
226
|
+
return ok(local);
|
|
227
|
+
return ok(await net.getAgentInfo(params.agent_id));
|
|
228
|
+
},
|
|
229
|
+
});
|
|
230
|
+
// #7 eacn_update_agent
|
|
231
|
+
api.registerTool({
|
|
232
|
+
name: "eacn_update_agent",
|
|
233
|
+
description: "Update an Agent's info (name, domains, skills, description).",
|
|
234
|
+
parameters: {
|
|
235
|
+
type: "object",
|
|
236
|
+
properties: {
|
|
237
|
+
agent_id: { type: "string" }, name: { type: "string" },
|
|
238
|
+
domains: { type: "array", items: { type: "string" } },
|
|
239
|
+
skills: { type: "array", items: { type: "object", properties: { id: { type: "string" }, name: { type: "string" }, description: { type: "string" }, tags: { type: "array", items: { type: "string" } }, parameters: { type: "object" } } } },
|
|
240
|
+
description: { type: "string" },
|
|
241
|
+
},
|
|
242
|
+
required: ["agent_id"],
|
|
243
|
+
},
|
|
244
|
+
async execute(_id, params) {
|
|
245
|
+
const { agent_id, ...updates } = params;
|
|
246
|
+
const res = await net.updateAgent(agent_id, updates);
|
|
247
|
+
const local = state.getAgent(agent_id);
|
|
248
|
+
if (local) {
|
|
249
|
+
if (updates.name !== undefined)
|
|
250
|
+
local.name = updates.name;
|
|
251
|
+
if (updates.domains !== undefined)
|
|
252
|
+
local.domains = updates.domains;
|
|
253
|
+
if (updates.skills !== undefined)
|
|
254
|
+
local.skills = updates.skills;
|
|
255
|
+
if (updates.description !== undefined)
|
|
256
|
+
local.description = updates.description;
|
|
257
|
+
state.addAgent(local);
|
|
258
|
+
}
|
|
259
|
+
return ok({ updated: true, agent_id, ...res });
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
// #8 eacn_unregister_agent
|
|
263
|
+
api.registerTool({
|
|
264
|
+
name: "eacn_unregister_agent",
|
|
265
|
+
description: "Unregister an Agent from the network.",
|
|
266
|
+
parameters: { type: "object", properties: { agent_id: { type: "string" } }, required: ["agent_id"] },
|
|
267
|
+
async execute(_id, params) {
|
|
268
|
+
const res = await net.unregisterAgent(params.agent_id);
|
|
269
|
+
ws.disconnect(params.agent_id);
|
|
270
|
+
state.removeAgent(params.agent_id);
|
|
271
|
+
return ok({ unregistered: true, agent_id: params.agent_id, ...res });
|
|
272
|
+
},
|
|
273
|
+
});
|
|
274
|
+
// #9 eacn_list_my_agents
|
|
275
|
+
api.registerTool({
|
|
276
|
+
name: "eacn_list_my_agents",
|
|
277
|
+
description: "List all Agents registered under this server.",
|
|
278
|
+
parameters: { type: "object", properties: {} },
|
|
279
|
+
async execute() {
|
|
280
|
+
const agents = state.listAgents();
|
|
281
|
+
return ok({ count: agents.length, agents: agents.map((a) => ({ agent_id: a.agent_id, name: a.name, agent_type: a.agent_type, domains: a.domains, ws_connected: ws.isConnected(a.agent_id) })) });
|
|
282
|
+
},
|
|
283
|
+
});
|
|
284
|
+
// #10 eacn_discover_agents
|
|
285
|
+
api.registerTool({
|
|
286
|
+
name: "eacn_discover_agents",
|
|
287
|
+
description: "Discover Agents by domain. Searches network via Gossip → DHT → Bootstrap fallback.",
|
|
288
|
+
parameters: { type: "object", properties: { domain: { type: "string" }, requester_id: { type: "string" } }, required: ["domain"] },
|
|
289
|
+
async execute(_id, params) {
|
|
290
|
+
return ok(await net.discoverAgents(params.domain, params.requester_id));
|
|
291
|
+
},
|
|
292
|
+
});
|
|
293
|
+
// #11 eacn_list_agents
|
|
294
|
+
api.registerTool({
|
|
295
|
+
name: "eacn_list_agents",
|
|
296
|
+
description: "List Agents from the network. Filter by domain or server_id.",
|
|
297
|
+
parameters: {
|
|
298
|
+
type: "object",
|
|
299
|
+
properties: {
|
|
300
|
+
domain: { type: "string" }, server_id: { type: "string" },
|
|
301
|
+
limit: { type: "number" }, offset: { type: "number" },
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
async execute(_id, params) {
|
|
305
|
+
const agents = await net.listAgentsRemote(params);
|
|
306
|
+
return ok({ count: agents.length, agents });
|
|
307
|
+
},
|
|
308
|
+
});
|
|
309
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
310
|
+
// Task Query (4)
|
|
311
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
312
|
+
// #12 eacn_get_task
|
|
313
|
+
api.registerTool({
|
|
314
|
+
name: "eacn_get_task",
|
|
315
|
+
description: "Get full task details including content, bids, and results.",
|
|
316
|
+
parameters: { type: "object", properties: { task_id: { type: "string" } }, required: ["task_id"] },
|
|
317
|
+
async execute(_id, params) { return ok(await net.getTask(params.task_id)); },
|
|
318
|
+
});
|
|
319
|
+
// #13 eacn_get_task_status
|
|
320
|
+
api.registerTool({
|
|
321
|
+
name: "eacn_get_task_status",
|
|
322
|
+
description: "Query task status and bid list (initiator only, no results).",
|
|
323
|
+
parameters: { type: "object", properties: { task_id: { type: "string" }, agent_id: { type: "string", description: "Initiator agent ID" } }, required: ["task_id", "agent_id"] },
|
|
324
|
+
async execute(_id, params) { return ok(await net.getTaskStatus(params.task_id, params.agent_id)); },
|
|
325
|
+
});
|
|
326
|
+
// #14 eacn_list_open_tasks
|
|
327
|
+
api.registerTool({
|
|
328
|
+
name: "eacn_list_open_tasks",
|
|
329
|
+
description: "List tasks open for bidding. Optionally filter by domains.",
|
|
330
|
+
parameters: { type: "object", properties: { domains: { type: "string", description: "Comma-separated domain filter" }, limit: { type: "number" }, offset: { type: "number" } } },
|
|
331
|
+
async execute(_id, params) {
|
|
332
|
+
const tasks = await net.getOpenTasks(params);
|
|
333
|
+
return ok({ count: tasks.length, tasks });
|
|
334
|
+
},
|
|
335
|
+
});
|
|
336
|
+
// #15 eacn_list_tasks
|
|
337
|
+
api.registerTool({
|
|
338
|
+
name: "eacn_list_tasks",
|
|
339
|
+
description: "List tasks with optional filters (status, initiator).",
|
|
340
|
+
parameters: { type: "object", properties: { status: { type: "string" }, initiator_id: { type: "string" }, limit: { type: "number" }, offset: { type: "number" } } },
|
|
341
|
+
async execute(_id, params) {
|
|
342
|
+
const tasks = await net.listTasks(params);
|
|
343
|
+
return ok({ count: tasks.length, tasks });
|
|
344
|
+
},
|
|
345
|
+
});
|
|
346
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
347
|
+
// Task Operations — Initiator (7)
|
|
348
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
349
|
+
// #16 eacn_create_task
|
|
350
|
+
api.registerTool({
|
|
351
|
+
name: "eacn_create_task",
|
|
352
|
+
description: "Create a new task. Checks local agents first, then broadcasts to network.",
|
|
353
|
+
parameters: {
|
|
354
|
+
type: "object",
|
|
355
|
+
properties: {
|
|
356
|
+
description: { type: "string" },
|
|
357
|
+
budget: { type: "number" },
|
|
358
|
+
domains: { type: "array", items: { type: "string" } },
|
|
359
|
+
deadline: { type: "string", description: "ISO 8601 deadline" },
|
|
360
|
+
max_concurrent_bidders: { type: "number" },
|
|
361
|
+
max_depth: { type: "number", description: "Max subtask nesting depth (default 3)" },
|
|
362
|
+
expected_output: {
|
|
363
|
+
type: "object",
|
|
364
|
+
properties: {
|
|
365
|
+
type: { type: "string", description: "Expected output format, e.g. 'json', 'text', 'code'" },
|
|
366
|
+
description: { type: "string", description: "What the output should contain" },
|
|
367
|
+
},
|
|
368
|
+
description: "Structured description of expected result",
|
|
369
|
+
},
|
|
370
|
+
human_contact: {
|
|
371
|
+
type: "object",
|
|
372
|
+
properties: {
|
|
373
|
+
allowed: { type: "boolean", description: "Whether human owner can be contacted for decisions" },
|
|
374
|
+
contact_id: { type: "string", description: "Human contact identifier" },
|
|
375
|
+
timeout_s: { type: "number", description: "Seconds to wait for human response before auto-reject" },
|
|
376
|
+
},
|
|
377
|
+
description: "Human-in-the-loop contact settings",
|
|
378
|
+
},
|
|
379
|
+
initiator_id: { type: "string", description: "Agent ID of the task initiator" },
|
|
380
|
+
},
|
|
381
|
+
required: ["description", "budget", "initiator_id"],
|
|
382
|
+
},
|
|
383
|
+
async execute(_id, params) {
|
|
384
|
+
const taskId = `t-${Date.now().toString(36)}`;
|
|
385
|
+
const localAgents = state.listAgents();
|
|
386
|
+
const matchedLocal = params.domains
|
|
387
|
+
? localAgents.filter((a) => a.agent_id !== params.initiator_id && params.domains.some((d) => a.domains.includes(d)))
|
|
388
|
+
: [];
|
|
389
|
+
const task = await net.createTask({
|
|
390
|
+
task_id: taskId, initiator_id: params.initiator_id,
|
|
391
|
+
content: { description: params.description, expected_output: params.expected_output },
|
|
392
|
+
domains: params.domains, budget: params.budget, deadline: params.deadline,
|
|
393
|
+
max_concurrent_bidders: params.max_concurrent_bidders, max_depth: params.max_depth,
|
|
394
|
+
human_contact: params.human_contact,
|
|
395
|
+
});
|
|
396
|
+
state.updateTask({ task_id: taskId, role: "initiator", status: task.status, domains: params.domains ?? [], description_summary: params.description.slice(0, 100), created_at: new Date().toISOString() });
|
|
397
|
+
return ok({ task_id: taskId, status: task.status, budget: params.budget, local_matches: matchedLocal.map((a) => a.agent_id) });
|
|
398
|
+
},
|
|
399
|
+
});
|
|
400
|
+
// #17 eacn_get_task_results
|
|
401
|
+
api.registerTool({
|
|
402
|
+
name: "eacn_get_task_results",
|
|
403
|
+
description: "Retrieve task results and adjudications. First call transitions task from awaiting_retrieval to completed.",
|
|
404
|
+
parameters: { type: "object", properties: { task_id: { type: "string" }, initiator_id: { type: "string" } }, required: ["task_id", "initiator_id"] },
|
|
405
|
+
async execute(_id, params) { return ok(await net.getTaskResults(params.task_id, params.initiator_id)); },
|
|
406
|
+
});
|
|
407
|
+
// #18 eacn_select_result
|
|
408
|
+
api.registerTool({
|
|
409
|
+
name: "eacn_select_result",
|
|
410
|
+
description: "Select the winning result. Triggers economic settlement.",
|
|
411
|
+
parameters: { type: "object", properties: { task_id: { type: "string" }, agent_id: { type: "string", description: "ID of the agent whose result to select" }, initiator_id: { type: "string" } }, required: ["task_id", "agent_id", "initiator_id"] },
|
|
412
|
+
async execute(_id, params) { return ok(await net.selectResult(params.task_id, params.initiator_id, params.agent_id)); },
|
|
413
|
+
});
|
|
414
|
+
// #19 eacn_close_task
|
|
415
|
+
api.registerTool({
|
|
416
|
+
name: "eacn_close_task",
|
|
417
|
+
description: "Manually close a task (stop accepting bids/results).",
|
|
418
|
+
parameters: { type: "object", properties: { task_id: { type: "string" }, initiator_id: { type: "string" } }, required: ["task_id", "initiator_id"] },
|
|
419
|
+
async execute(_id, params) { return ok(await net.closeTask(params.task_id, params.initiator_id)); },
|
|
420
|
+
});
|
|
421
|
+
// #20 eacn_update_deadline
|
|
422
|
+
api.registerTool({
|
|
423
|
+
name: "eacn_update_deadline",
|
|
424
|
+
description: "Update task deadline.",
|
|
425
|
+
parameters: { type: "object", properties: { task_id: { type: "string" }, new_deadline: { type: "string", description: "New ISO 8601 deadline" }, initiator_id: { type: "string" } }, required: ["task_id", "new_deadline", "initiator_id"] },
|
|
426
|
+
async execute(_id, params) { return ok(await net.updateDeadline(params.task_id, params.initiator_id, params.new_deadline)); },
|
|
427
|
+
});
|
|
428
|
+
// #21 eacn_update_discussions
|
|
429
|
+
api.registerTool({
|
|
430
|
+
name: "eacn_update_discussions",
|
|
431
|
+
description: "Add a discussion message to a task. Synced to all bidders.",
|
|
432
|
+
parameters: { type: "object", properties: { task_id: { type: "string" }, message: { type: "string" }, initiator_id: { type: "string" } }, required: ["task_id", "message", "initiator_id"] },
|
|
433
|
+
async execute(_id, params) { return ok(await net.updateDiscussions(params.task_id, params.initiator_id, params.message)); },
|
|
434
|
+
});
|
|
435
|
+
// #22 eacn_confirm_budget
|
|
436
|
+
api.registerTool({
|
|
437
|
+
name: "eacn_confirm_budget",
|
|
438
|
+
description: "Respond to a budget confirmation request (when a bid exceeds current budget).",
|
|
439
|
+
parameters: { type: "object", properties: { task_id: { type: "string" }, approved: { type: "boolean" }, new_budget: { type: "number" }, initiator_id: { type: "string" } }, required: ["task_id", "approved", "initiator_id"] },
|
|
440
|
+
async execute(_id, params) { return ok(await net.confirmBudget(params.task_id, params.initiator_id, params.approved, params.new_budget)); },
|
|
441
|
+
});
|
|
442
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
443
|
+
// Task Operations — Executor (5)
|
|
444
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
445
|
+
// #23 eacn_submit_bid
|
|
446
|
+
api.registerTool({
|
|
447
|
+
name: "eacn_submit_bid",
|
|
448
|
+
description: "Submit a bid on a task (confidence + price).",
|
|
449
|
+
parameters: { type: "object", properties: { task_id: { type: "string" }, confidence: { type: "number", description: "0.0-1.0 confidence in ability to complete" }, price: { type: "number", description: "Bid price" }, agent_id: { type: "string" } }, required: ["task_id", "confidence", "price", "agent_id"] },
|
|
450
|
+
async execute(_id, params) {
|
|
451
|
+
const res = await net.submitBid(params.task_id, params.agent_id, params.confidence, params.price);
|
|
452
|
+
if (res.status && res.status !== "rejected") {
|
|
453
|
+
state.updateTask({ task_id: params.task_id, role: "executor", status: "bidding", domains: [], description_summary: "", created_at: new Date().toISOString() });
|
|
454
|
+
}
|
|
455
|
+
return ok(res);
|
|
456
|
+
},
|
|
457
|
+
});
|
|
458
|
+
// #24 eacn_submit_result
|
|
459
|
+
api.registerTool({
|
|
460
|
+
name: "eacn_submit_result",
|
|
461
|
+
description: "Submit execution result for a task.",
|
|
462
|
+
parameters: { type: "object", properties: { task_id: { type: "string" }, content: { type: "object", description: "Result content object" }, agent_id: { type: "string" } }, required: ["task_id", "content", "agent_id"] },
|
|
463
|
+
async execute(_id, params) {
|
|
464
|
+
const res = await net.submitResult(params.task_id, params.agent_id, params.content);
|
|
465
|
+
try {
|
|
466
|
+
await net.reportEvent(params.agent_id, "task_completed");
|
|
467
|
+
}
|
|
468
|
+
catch { /* non-critical */ }
|
|
469
|
+
return ok(res);
|
|
470
|
+
},
|
|
471
|
+
});
|
|
472
|
+
// #25 eacn_reject_task
|
|
473
|
+
api.registerTool({
|
|
474
|
+
name: "eacn_reject_task",
|
|
475
|
+
description: "Reject/return a task. Frees the execution slot. Note: rejection affects reputation.",
|
|
476
|
+
parameters: { type: "object", properties: { task_id: { type: "string" }, reason: { type: "string" }, agent_id: { type: "string" } }, required: ["task_id", "agent_id"] },
|
|
477
|
+
async execute(_id, params) {
|
|
478
|
+
const res = await net.rejectTask(params.task_id, params.agent_id, params.reason);
|
|
479
|
+
try {
|
|
480
|
+
await net.reportEvent(params.agent_id, "task_rejected");
|
|
481
|
+
}
|
|
482
|
+
catch { /* non-critical */ }
|
|
483
|
+
return ok(res);
|
|
484
|
+
},
|
|
485
|
+
});
|
|
486
|
+
// #26 eacn_create_subtask
|
|
487
|
+
api.registerTool({
|
|
488
|
+
name: "eacn_create_subtask",
|
|
489
|
+
description: "Create a subtask under a parent task. Budget is carved from parent's escrow.",
|
|
490
|
+
parameters: {
|
|
491
|
+
type: "object",
|
|
492
|
+
properties: {
|
|
493
|
+
parent_task_id: { type: "string" }, description: { type: "string" },
|
|
494
|
+
domains: { type: "array", items: { type: "string" } },
|
|
495
|
+
budget: { type: "number" }, deadline: { type: "string" },
|
|
496
|
+
initiator_id: { type: "string", description: "Agent ID of the executor creating the subtask" },
|
|
497
|
+
},
|
|
498
|
+
required: ["parent_task_id", "description", "domains", "budget", "initiator_id"],
|
|
499
|
+
},
|
|
500
|
+
async execute(_id, params) {
|
|
501
|
+
const task = await net.createSubtask(params.parent_task_id, params.initiator_id, { description: params.description }, params.domains, params.budget, params.deadline);
|
|
502
|
+
return ok({ subtask_id: task.id, parent_task_id: params.parent_task_id, status: task.status, depth: task.depth });
|
|
503
|
+
},
|
|
504
|
+
});
|
|
505
|
+
// #27 eacn_send_message
|
|
506
|
+
api.registerTool({
|
|
507
|
+
name: "eacn_send_message",
|
|
508
|
+
description: "Send a direct message to another Agent (A2A point-to-point).",
|
|
509
|
+
parameters: { type: "object", properties: { agent_id: { type: "string", description: "Target agent ID" }, content: { type: "string" }, sender_id: { type: "string", description: "Your agent ID" } }, required: ["agent_id", "content", "sender_id"] },
|
|
510
|
+
async execute(_id, params) {
|
|
511
|
+
return ok({ sent: true, to: params.agent_id, from: params.sender_id, note: "Direct A2A messaging will use WebSocket routing in future versions." });
|
|
512
|
+
},
|
|
513
|
+
});
|
|
514
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
515
|
+
// Reputation (2)
|
|
516
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
517
|
+
// #28 eacn_report_event
|
|
518
|
+
api.registerTool({
|
|
519
|
+
name: "eacn_report_event",
|
|
520
|
+
description: "Report a reputation event. Usually called automatically by other tools, but exposed for special cases.",
|
|
521
|
+
parameters: { type: "object", properties: { agent_id: { type: "string" }, event_type: { type: "string", description: "task_completed | task_rejected | task_timeout | bid_declined" } }, required: ["agent_id", "event_type"] },
|
|
522
|
+
async execute(_id, params) {
|
|
523
|
+
const res = await net.reportEvent(params.agent_id, params.event_type);
|
|
524
|
+
state.updateReputationCache(params.agent_id, res.score);
|
|
525
|
+
return ok(res);
|
|
526
|
+
},
|
|
527
|
+
});
|
|
528
|
+
// #29 eacn_get_reputation
|
|
529
|
+
api.registerTool({
|
|
530
|
+
name: "eacn_get_reputation",
|
|
531
|
+
description: "Query an Agent's global reputation score.",
|
|
532
|
+
parameters: { type: "object", properties: { agent_id: { type: "string" } }, required: ["agent_id"] },
|
|
533
|
+
async execute(_id, params) {
|
|
534
|
+
const res = await net.getReputation(params.agent_id);
|
|
535
|
+
state.updateReputationCache(params.agent_id, res.score);
|
|
536
|
+
return ok(res);
|
|
537
|
+
},
|
|
538
|
+
});
|
|
539
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
540
|
+
// Economy (2)
|
|
541
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
542
|
+
// #30 eacn_get_balance
|
|
543
|
+
api.registerTool({
|
|
544
|
+
name: "eacn_get_balance",
|
|
545
|
+
description: "Query an Agent's account balance: available funds and frozen (escrowed) funds.",
|
|
546
|
+
parameters: { type: "object", properties: { agent_id: { type: "string", description: "Agent ID to check balance for" } }, required: ["agent_id"] },
|
|
547
|
+
async execute(_id, params) {
|
|
548
|
+
return ok(await net.getBalance(params.agent_id));
|
|
549
|
+
},
|
|
550
|
+
});
|
|
551
|
+
// #31 eacn_deposit
|
|
552
|
+
api.registerTool({
|
|
553
|
+
name: "eacn_deposit",
|
|
554
|
+
description: "Deposit funds into an Agent's account. Increases available balance.",
|
|
555
|
+
parameters: { type: "object", properties: { agent_id: { type: "string", description: "Agent ID to deposit funds for" }, amount: { type: "number", description: "Amount to deposit (must be > 0)" } }, required: ["agent_id", "amount"] },
|
|
556
|
+
async execute(_id, params) {
|
|
557
|
+
return ok(await net.deposit(params.agent_id, params.amount));
|
|
558
|
+
},
|
|
559
|
+
});
|
|
560
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
561
|
+
// Events (1)
|
|
562
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
563
|
+
// #32 eacn_get_events
|
|
564
|
+
api.registerTool({
|
|
565
|
+
name: "eacn_get_events",
|
|
566
|
+
description: "Get pending events. WebSocket connections buffer events in memory; this drains the buffer.",
|
|
567
|
+
parameters: { type: "object", properties: {} },
|
|
568
|
+
async execute() {
|
|
569
|
+
const events = state.drainEvents();
|
|
570
|
+
return ok({ count: events.length, events });
|
|
571
|
+
},
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED