network-ai 3.0.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/LICENSE +21 -0
- package/QUICKSTART.md +260 -0
- package/README.md +604 -0
- package/SKILL.md +568 -0
- package/dist/adapters/adapter-registry.d.ts +94 -0
- package/dist/adapters/adapter-registry.d.ts.map +1 -0
- package/dist/adapters/adapter-registry.js +355 -0
- package/dist/adapters/adapter-registry.js.map +1 -0
- package/dist/adapters/agno-adapter.d.ts +112 -0
- package/dist/adapters/agno-adapter.d.ts.map +1 -0
- package/dist/adapters/agno-adapter.js +140 -0
- package/dist/adapters/agno-adapter.js.map +1 -0
- package/dist/adapters/autogen-adapter.d.ts +67 -0
- package/dist/adapters/autogen-adapter.d.ts.map +1 -0
- package/dist/adapters/autogen-adapter.js +141 -0
- package/dist/adapters/autogen-adapter.js.map +1 -0
- package/dist/adapters/base-adapter.d.ts +51 -0
- package/dist/adapters/base-adapter.d.ts.map +1 -0
- package/dist/adapters/base-adapter.js +103 -0
- package/dist/adapters/base-adapter.js.map +1 -0
- package/dist/adapters/crewai-adapter.d.ts +72 -0
- package/dist/adapters/crewai-adapter.d.ts.map +1 -0
- package/dist/adapters/crewai-adapter.js +148 -0
- package/dist/adapters/crewai-adapter.js.map +1 -0
- package/dist/adapters/custom-adapter.d.ts +74 -0
- package/dist/adapters/custom-adapter.d.ts.map +1 -0
- package/dist/adapters/custom-adapter.js +142 -0
- package/dist/adapters/custom-adapter.js.map +1 -0
- package/dist/adapters/dspy-adapter.d.ts +70 -0
- package/dist/adapters/dspy-adapter.d.ts.map +1 -0
- package/dist/adapters/dspy-adapter.js +127 -0
- package/dist/adapters/dspy-adapter.js.map +1 -0
- package/dist/adapters/haystack-adapter.d.ts +83 -0
- package/dist/adapters/haystack-adapter.d.ts.map +1 -0
- package/dist/adapters/haystack-adapter.js +149 -0
- package/dist/adapters/haystack-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +47 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +56 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/langchain-adapter.d.ts +51 -0
- package/dist/adapters/langchain-adapter.d.ts.map +1 -0
- package/dist/adapters/langchain-adapter.js +134 -0
- package/dist/adapters/langchain-adapter.js.map +1 -0
- package/dist/adapters/llamaindex-adapter.d.ts +89 -0
- package/dist/adapters/llamaindex-adapter.d.ts.map +1 -0
- package/dist/adapters/llamaindex-adapter.js +135 -0
- package/dist/adapters/llamaindex-adapter.js.map +1 -0
- package/dist/adapters/mcp-adapter.d.ts +90 -0
- package/dist/adapters/mcp-adapter.d.ts.map +1 -0
- package/dist/adapters/mcp-adapter.js +200 -0
- package/dist/adapters/mcp-adapter.js.map +1 -0
- package/dist/adapters/openai-assistants-adapter.d.ts +94 -0
- package/dist/adapters/openai-assistants-adapter.d.ts.map +1 -0
- package/dist/adapters/openai-assistants-adapter.js +130 -0
- package/dist/adapters/openai-assistants-adapter.js.map +1 -0
- package/dist/adapters/openclaw-adapter.d.ts +21 -0
- package/dist/adapters/openclaw-adapter.d.ts.map +1 -0
- package/dist/adapters/openclaw-adapter.js +140 -0
- package/dist/adapters/openclaw-adapter.js.map +1 -0
- package/dist/adapters/semantic-kernel-adapter.d.ts +73 -0
- package/dist/adapters/semantic-kernel-adapter.d.ts.map +1 -0
- package/dist/adapters/semantic-kernel-adapter.js +123 -0
- package/dist/adapters/semantic-kernel-adapter.js.map +1 -0
- package/dist/index.d.ts +379 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1428 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/blackboard-validator.d.ts +205 -0
- package/dist/lib/blackboard-validator.d.ts.map +1 -0
- package/dist/lib/blackboard-validator.js +756 -0
- package/dist/lib/blackboard-validator.js.map +1 -0
- package/dist/lib/locked-blackboard.d.ts +174 -0
- package/dist/lib/locked-blackboard.d.ts.map +1 -0
- package/dist/lib/locked-blackboard.js +654 -0
- package/dist/lib/locked-blackboard.js.map +1 -0
- package/dist/lib/swarm-utils.d.ts +136 -0
- package/dist/lib/swarm-utils.d.ts.map +1 -0
- package/dist/lib/swarm-utils.js +510 -0
- package/dist/lib/swarm-utils.js.map +1 -0
- package/dist/security.d.ts +269 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +713 -0
- package/dist/security.js.map +1 -0
- package/package.json +84 -0
- package/scripts/blackboard.py +819 -0
- package/scripts/check_permission.py +331 -0
- package/scripts/revoke_token.py +243 -0
- package/scripts/swarm_guard.py +1140 -0
- package/scripts/validate_token.py +97 -0
- package/types/agent-adapter.d.ts +244 -0
- package/types/openclaw-core.d.ts +52 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Adapter Registry -- Routes agent requests to the correct adapter
|
|
4
|
+
*
|
|
5
|
+
* The registry is the single entry point the SwarmOrchestrator uses.
|
|
6
|
+
* It manages multiple adapters, routes requests based on agent ID patterns,
|
|
7
|
+
* and provides unified agent discovery across all registered adapters.
|
|
8
|
+
*
|
|
9
|
+
* @module AdapterRegistry
|
|
10
|
+
* @version 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.AdapterRegistry = void 0;
|
|
14
|
+
exports.getRegistry = getRegistry;
|
|
15
|
+
class AdapterRegistry {
|
|
16
|
+
adapters = new Map();
|
|
17
|
+
routes = [];
|
|
18
|
+
defaultAdapterName = null;
|
|
19
|
+
eventHandlers = new Map();
|
|
20
|
+
agentCache = new Map(); // agentId -> adapterName
|
|
21
|
+
constructor(config) {
|
|
22
|
+
if (config) {
|
|
23
|
+
this.defaultAdapterName = config.defaultAdapter ?? null;
|
|
24
|
+
this.routes = config.routes ?? [];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// =========================================================================
|
|
28
|
+
// ADAPTER MANAGEMENT
|
|
29
|
+
// =========================================================================
|
|
30
|
+
/**
|
|
31
|
+
* Register an adapter with the registry.
|
|
32
|
+
* Call this for each agent framework you want to support.
|
|
33
|
+
*/
|
|
34
|
+
registerAdapter(adapter) {
|
|
35
|
+
if (this.adapters.has(adapter.name)) {
|
|
36
|
+
throw new Error(`Adapter "${adapter.name}" is already registered`);
|
|
37
|
+
}
|
|
38
|
+
this.adapters.set(adapter.name, adapter);
|
|
39
|
+
this.emit('adapter:registered', adapter.name);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Initialize a registered adapter with its configuration
|
|
43
|
+
*/
|
|
44
|
+
async initializeAdapter(adapterName, config = {}) {
|
|
45
|
+
const adapter = this.adapters.get(adapterName);
|
|
46
|
+
if (!adapter) {
|
|
47
|
+
throw new Error(`Adapter "${adapterName}" is not registered`);
|
|
48
|
+
}
|
|
49
|
+
await adapter.initialize(config);
|
|
50
|
+
this.emit('adapter:initialized', adapterName);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Register + initialize in one call (convenience)
|
|
54
|
+
*/
|
|
55
|
+
async addAdapter(adapter, config = {}) {
|
|
56
|
+
this.registerAdapter(adapter);
|
|
57
|
+
await this.initializeAdapter(adapter.name, config);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Remove an adapter and shut it down
|
|
61
|
+
*/
|
|
62
|
+
async removeAdapter(adapterName) {
|
|
63
|
+
const adapter = this.adapters.get(adapterName);
|
|
64
|
+
if (adapter) {
|
|
65
|
+
await adapter.shutdown();
|
|
66
|
+
this.adapters.delete(adapterName);
|
|
67
|
+
// Clear agent cache entries for this adapter
|
|
68
|
+
for (const [agentId, name] of this.agentCache.entries()) {
|
|
69
|
+
if (name === adapterName)
|
|
70
|
+
this.agentCache.delete(agentId);
|
|
71
|
+
}
|
|
72
|
+
this.emit('adapter:shutdown', adapterName);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get a registered adapter by name
|
|
77
|
+
*/
|
|
78
|
+
getAdapter(adapterName) {
|
|
79
|
+
return this.adapters.get(adapterName);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* List all registered adapters
|
|
83
|
+
*/
|
|
84
|
+
listAdapters() {
|
|
85
|
+
return Array.from(this.adapters.values()).map(a => ({
|
|
86
|
+
name: a.name,
|
|
87
|
+
version: a.version,
|
|
88
|
+
ready: a.isReady(),
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Set the default adapter for unrouted requests
|
|
93
|
+
*/
|
|
94
|
+
setDefaultAdapter(adapterName) {
|
|
95
|
+
if (!this.adapters.has(adapterName)) {
|
|
96
|
+
throw new Error(`Adapter "${adapterName}" is not registered`);
|
|
97
|
+
}
|
|
98
|
+
this.defaultAdapterName = adapterName;
|
|
99
|
+
}
|
|
100
|
+
// =========================================================================
|
|
101
|
+
// ROUTING
|
|
102
|
+
// =========================================================================
|
|
103
|
+
/**
|
|
104
|
+
* Add a routing rule: agent IDs matching the pattern go to the specified adapter.
|
|
105
|
+
*
|
|
106
|
+
* Patterns:
|
|
107
|
+
* "lc:*" -> all agents prefixed with "lc:" go to the LangChain adapter
|
|
108
|
+
* "autogen:*" -> AutoGen agents
|
|
109
|
+
* "crew:*" -> CrewAI agents
|
|
110
|
+
* "*" -> catch-all
|
|
111
|
+
* "data_analyst" -> exact match
|
|
112
|
+
*/
|
|
113
|
+
addRoute(route) {
|
|
114
|
+
this.routes.push(route);
|
|
115
|
+
// Sort by priority (highest first)
|
|
116
|
+
this.routes.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Resolve which adapter should handle a given agent ID
|
|
120
|
+
*/
|
|
121
|
+
resolveAdapter(agentId) {
|
|
122
|
+
// 1. Check cache
|
|
123
|
+
const cached = this.agentCache.get(agentId);
|
|
124
|
+
if (cached) {
|
|
125
|
+
const adapter = this.adapters.get(cached);
|
|
126
|
+
if (adapter?.isReady())
|
|
127
|
+
return adapter;
|
|
128
|
+
this.agentCache.delete(agentId); // Stale cache
|
|
129
|
+
}
|
|
130
|
+
// 2. Check routing rules
|
|
131
|
+
for (const route of this.routes) {
|
|
132
|
+
if (this.matchPattern(agentId, route.pattern)) {
|
|
133
|
+
const adapter = this.adapters.get(route.adapterName);
|
|
134
|
+
if (adapter?.isReady()) {
|
|
135
|
+
this.agentCache.set(agentId, route.adapterName);
|
|
136
|
+
return adapter;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// 3. Check if agent ID has a prefix indicating the adapter (convention: "adapter:agentId")
|
|
141
|
+
const colonIndex = agentId.indexOf(':');
|
|
142
|
+
if (colonIndex > 0) {
|
|
143
|
+
const prefix = agentId.substring(0, colonIndex);
|
|
144
|
+
const adapter = this.adapters.get(prefix);
|
|
145
|
+
if (adapter?.isReady()) {
|
|
146
|
+
this.agentCache.set(agentId, prefix);
|
|
147
|
+
return adapter;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// 4. Fall back to default adapter
|
|
151
|
+
if (this.defaultAdapterName) {
|
|
152
|
+
const adapter = this.adapters.get(this.defaultAdapterName);
|
|
153
|
+
if (adapter?.isReady())
|
|
154
|
+
return adapter;
|
|
155
|
+
}
|
|
156
|
+
// 5. If only one adapter is registered, use it
|
|
157
|
+
if (this.adapters.size === 1) {
|
|
158
|
+
const adapter = Array.from(this.adapters.values())[0];
|
|
159
|
+
if (adapter.isReady())
|
|
160
|
+
return adapter;
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
matchPattern(agentId, pattern) {
|
|
165
|
+
if (pattern === '*')
|
|
166
|
+
return true;
|
|
167
|
+
if (pattern === agentId)
|
|
168
|
+
return true;
|
|
169
|
+
// Simple glob: "prefix:*" or "prefix*"
|
|
170
|
+
if (pattern.endsWith('*')) {
|
|
171
|
+
const prefix = pattern.slice(0, -1);
|
|
172
|
+
return agentId.startsWith(prefix);
|
|
173
|
+
}
|
|
174
|
+
// Regex pattern (wrapped in /.../)
|
|
175
|
+
if (pattern.startsWith('/') && pattern.endsWith('/')) {
|
|
176
|
+
try {
|
|
177
|
+
return new RegExp(pattern.slice(1, -1)).test(agentId);
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
// =========================================================================
|
|
186
|
+
// EXECUTION -- The main interface the orchestrator uses
|
|
187
|
+
// =========================================================================
|
|
188
|
+
/**
|
|
189
|
+
* Execute an agent task, automatically routing to the correct adapter.
|
|
190
|
+
* This is the primary method the SwarmOrchestrator calls.
|
|
191
|
+
*/
|
|
192
|
+
async executeAgent(agentId, payload, context) {
|
|
193
|
+
const adapter = this.resolveAdapter(agentId);
|
|
194
|
+
if (!adapter) {
|
|
195
|
+
return {
|
|
196
|
+
success: false,
|
|
197
|
+
error: {
|
|
198
|
+
code: 'NO_ADAPTER',
|
|
199
|
+
message: `No adapter found for agent "${agentId}". Register an adapter or add a routing rule.`,
|
|
200
|
+
recoverable: false,
|
|
201
|
+
suggestedAction: 'Register an adapter using registry.addAdapter() and optionally add routes with registry.addRoute()',
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
this.emit('agent:execution:start', adapter.name, { agentId, payload });
|
|
206
|
+
const startTime = Date.now();
|
|
207
|
+
try {
|
|
208
|
+
// Strip adapter prefix from agentId if present (e.g., "lc:research" -> "research")
|
|
209
|
+
const colonIndex = agentId.indexOf(':');
|
|
210
|
+
const resolvedAgentId = colonIndex > 0 && this.adapters.has(agentId.substring(0, colonIndex))
|
|
211
|
+
? agentId.substring(colonIndex + 1)
|
|
212
|
+
: agentId;
|
|
213
|
+
const result = await adapter.executeAgent(resolvedAgentId, payload, context);
|
|
214
|
+
// Enrich result with routing metadata
|
|
215
|
+
result.metadata = {
|
|
216
|
+
...result.metadata,
|
|
217
|
+
adapter: adapter.name,
|
|
218
|
+
executionTimeMs: Date.now() - startTime,
|
|
219
|
+
};
|
|
220
|
+
this.emit('agent:execution:complete', adapter.name, { agentId, result });
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
this.emit('agent:execution:error', adapter.name, { agentId, error });
|
|
225
|
+
return {
|
|
226
|
+
success: false,
|
|
227
|
+
error: {
|
|
228
|
+
code: 'ADAPTER_ERROR',
|
|
229
|
+
message: error instanceof Error ? error.message : 'Unknown adapter error',
|
|
230
|
+
recoverable: true,
|
|
231
|
+
nativeError: error,
|
|
232
|
+
},
|
|
233
|
+
metadata: {
|
|
234
|
+
adapter: adapter.name,
|
|
235
|
+
executionTimeMs: Date.now() - startTime,
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// =========================================================================
|
|
241
|
+
// DISCOVERY -- Unified agent listing across all adapters
|
|
242
|
+
// =========================================================================
|
|
243
|
+
/**
|
|
244
|
+
* Discover all agents across all registered adapters
|
|
245
|
+
*/
|
|
246
|
+
async discoverAgents() {
|
|
247
|
+
const allAgents = [];
|
|
248
|
+
for (const adapter of this.adapters.values()) {
|
|
249
|
+
if (!adapter.isReady())
|
|
250
|
+
continue;
|
|
251
|
+
try {
|
|
252
|
+
const agents = await adapter.listAgents();
|
|
253
|
+
allAgents.push(...agents);
|
|
254
|
+
for (const agent of agents) {
|
|
255
|
+
this.agentCache.set(agent.id, adapter.name);
|
|
256
|
+
this.emit('agent:discovered', adapter.name, { agent });
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
// Skip adapters that fail discovery
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return allAgents;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Check if any adapter can handle a specific agent
|
|
267
|
+
*/
|
|
268
|
+
async isAgentAvailable(agentId) {
|
|
269
|
+
const adapter = this.resolveAdapter(agentId);
|
|
270
|
+
if (!adapter)
|
|
271
|
+
return false;
|
|
272
|
+
const colonIndex = agentId.indexOf(':');
|
|
273
|
+
const resolvedId = colonIndex > 0 && this.adapters.has(agentId.substring(0, colonIndex))
|
|
274
|
+
? agentId.substring(colonIndex + 1)
|
|
275
|
+
: agentId;
|
|
276
|
+
return adapter.isAgentAvailable(resolvedId);
|
|
277
|
+
}
|
|
278
|
+
// =========================================================================
|
|
279
|
+
// HEALTH -- System-wide health status
|
|
280
|
+
// =========================================================================
|
|
281
|
+
async healthCheck() {
|
|
282
|
+
const results = {};
|
|
283
|
+
for (const [name, adapter] of this.adapters.entries()) {
|
|
284
|
+
try {
|
|
285
|
+
results[name] = await adapter.healthCheck();
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
results[name] = {
|
|
289
|
+
healthy: false,
|
|
290
|
+
details: error instanceof Error ? error.message : 'Health check failed',
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return results;
|
|
295
|
+
}
|
|
296
|
+
// =========================================================================
|
|
297
|
+
// EVENTS
|
|
298
|
+
// =========================================================================
|
|
299
|
+
on(event, handler) {
|
|
300
|
+
const handlers = this.eventHandlers.get(event) ?? [];
|
|
301
|
+
handlers.push(handler);
|
|
302
|
+
this.eventHandlers.set(event, handlers);
|
|
303
|
+
}
|
|
304
|
+
off(event, handler) {
|
|
305
|
+
const handlers = this.eventHandlers.get(event) ?? [];
|
|
306
|
+
this.eventHandlers.set(event, handlers.filter(h => h !== handler));
|
|
307
|
+
}
|
|
308
|
+
emit(type, adapter, data) {
|
|
309
|
+
const event = {
|
|
310
|
+
type,
|
|
311
|
+
adapter,
|
|
312
|
+
timestamp: new Date().toISOString(),
|
|
313
|
+
data,
|
|
314
|
+
};
|
|
315
|
+
const handlers = this.eventHandlers.get(type) ?? [];
|
|
316
|
+
for (const handler of handlers) {
|
|
317
|
+
try {
|
|
318
|
+
handler(event);
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
// Don't let event handler errors break execution
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
// =========================================================================
|
|
326
|
+
// CLEANUP
|
|
327
|
+
// =========================================================================
|
|
328
|
+
/**
|
|
329
|
+
* Shut down all adapters and clear the registry
|
|
330
|
+
*/
|
|
331
|
+
async shutdownAll() {
|
|
332
|
+
for (const [name, adapter] of this.adapters.entries()) {
|
|
333
|
+
try {
|
|
334
|
+
await adapter.shutdown();
|
|
335
|
+
this.emit('adapter:shutdown', name);
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
// Best-effort shutdown
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
this.adapters.clear();
|
|
342
|
+
this.agentCache.clear();
|
|
343
|
+
this.routes = [];
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
exports.AdapterRegistry = AdapterRegistry;
|
|
347
|
+
// Default singleton registry
|
|
348
|
+
let defaultRegistry = null;
|
|
349
|
+
function getRegistry(config) {
|
|
350
|
+
if (!defaultRegistry || config) {
|
|
351
|
+
defaultRegistry = new AdapterRegistry(config);
|
|
352
|
+
}
|
|
353
|
+
return defaultRegistry;
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=adapter-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-registry.js","sourceRoot":"","sources":["../../adapters/adapter-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agno Adapter (formerly Phidata)
|
|
3
|
+
*
|
|
4
|
+
* Integrates Agno agents and teams with the SwarmOrchestrator.
|
|
5
|
+
* Agno is a lightweight framework for building multi-agent systems with
|
|
6
|
+
* tool use, memory, knowledge bases, and structured outputs.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const adapter = new AgnoAdapter();
|
|
10
|
+
* adapter.registerAgent("researcher", myAgnoAgent);
|
|
11
|
+
* adapter.registerTeam("dev-team", myAgnoTeam);
|
|
12
|
+
* await registry.addAdapter(adapter);
|
|
13
|
+
*
|
|
14
|
+
* Then in the orchestrator:
|
|
15
|
+
* delegateTask({ targetAgent: "agno:researcher", ... })
|
|
16
|
+
*
|
|
17
|
+
* @module AgnoAdapter
|
|
18
|
+
* @version 1.0.0
|
|
19
|
+
*/
|
|
20
|
+
import { BaseAdapter } from './base-adapter';
|
|
21
|
+
import type { AdapterCapabilities, AgentPayload, AgentContext, AgentResult } from '../types/agent-adapter';
|
|
22
|
+
/** Matches Agno's Agent class */
|
|
23
|
+
export interface AgnoAgent {
|
|
24
|
+
/** Agent name */
|
|
25
|
+
name?: string;
|
|
26
|
+
/** Run the agent with a message */
|
|
27
|
+
run(message: string, options?: AgnoRunOptions): Promise<AgnoResponse>;
|
|
28
|
+
/** Print-friendly run (optional) */
|
|
29
|
+
printResponse?(message: string): Promise<void>;
|
|
30
|
+
/** Stream response (optional) */
|
|
31
|
+
runStream?(message: string): AsyncIterable<AgnoStreamChunk>;
|
|
32
|
+
}
|
|
33
|
+
/** Matches Agno's Team class */
|
|
34
|
+
export interface AgnoTeam {
|
|
35
|
+
/** Team name */
|
|
36
|
+
name?: string;
|
|
37
|
+
/** Run the team */
|
|
38
|
+
run(message: string, options?: AgnoRunOptions): Promise<AgnoResponse>;
|
|
39
|
+
/** Members of the team */
|
|
40
|
+
members?: Array<{
|
|
41
|
+
name: string;
|
|
42
|
+
role?: string;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
/** Run options */
|
|
46
|
+
export interface AgnoRunOptions {
|
|
47
|
+
/** Stream the response */
|
|
48
|
+
stream?: boolean;
|
|
49
|
+
/** Additional context */
|
|
50
|
+
context?: Record<string, unknown>;
|
|
51
|
+
/** Structured output schema */
|
|
52
|
+
responseModel?: unknown;
|
|
53
|
+
/** Max iterations for reasoning */
|
|
54
|
+
maxIterations?: number;
|
|
55
|
+
}
|
|
56
|
+
/** Agno response */
|
|
57
|
+
export interface AgnoResponse {
|
|
58
|
+
/** The content of the response */
|
|
59
|
+
content?: string;
|
|
60
|
+
/** Messages from the conversation */
|
|
61
|
+
messages?: Array<{
|
|
62
|
+
role: string;
|
|
63
|
+
content: string;
|
|
64
|
+
}>;
|
|
65
|
+
/** Tool calls made */
|
|
66
|
+
toolCalls?: Array<{
|
|
67
|
+
name: string;
|
|
68
|
+
args: Record<string, unknown>;
|
|
69
|
+
result?: unknown;
|
|
70
|
+
}>;
|
|
71
|
+
/** Structured output (if responseModel was used) */
|
|
72
|
+
structuredOutput?: unknown;
|
|
73
|
+
/** Token usage */
|
|
74
|
+
usage?: {
|
|
75
|
+
input_tokens?: number;
|
|
76
|
+
output_tokens?: number;
|
|
77
|
+
};
|
|
78
|
+
/** Which agent responded (in team mode) */
|
|
79
|
+
respondingAgent?: string;
|
|
80
|
+
}
|
|
81
|
+
/** Stream chunk */
|
|
82
|
+
export interface AgnoStreamChunk {
|
|
83
|
+
content?: string;
|
|
84
|
+
done?: boolean;
|
|
85
|
+
}
|
|
86
|
+
/** A simple function-based agent (for lightweight usage) */
|
|
87
|
+
export type AgnoFunction = (message: string, context?: Record<string, unknown>) => Promise<string | AgnoResponse>;
|
|
88
|
+
export declare class AgnoAdapter extends BaseAdapter {
|
|
89
|
+
readonly name = "agno";
|
|
90
|
+
readonly version = "1.0.0";
|
|
91
|
+
private entries;
|
|
92
|
+
get capabilities(): AdapterCapabilities;
|
|
93
|
+
registerAgent(agentId: string, agent: AgnoAgent, metadata?: {
|
|
94
|
+
description?: string;
|
|
95
|
+
capabilities?: string[];
|
|
96
|
+
}): void;
|
|
97
|
+
registerTeam(agentId: string, team: AgnoTeam, metadata?: {
|
|
98
|
+
description?: string;
|
|
99
|
+
capabilities?: string[];
|
|
100
|
+
}): void;
|
|
101
|
+
registerFunction(agentId: string, fn: AgnoFunction, metadata?: {
|
|
102
|
+
description?: string;
|
|
103
|
+
capabilities?: string[];
|
|
104
|
+
}): void;
|
|
105
|
+
executeAgent(agentId: string, payload: AgentPayload, context: AgentContext): Promise<AgentResult>;
|
|
106
|
+
private buildMessage;
|
|
107
|
+
private executeAgnoAgent;
|
|
108
|
+
private executeAgnoTeam;
|
|
109
|
+
private executeAgnoFunction;
|
|
110
|
+
private normalizeResponse;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=agno-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agno-adapter.d.ts","sourceRoot":"","sources":["../../adapters/agno-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Agno Adapter (formerly Phidata)
|
|
4
|
+
*
|
|
5
|
+
* Integrates Agno agents and teams with the SwarmOrchestrator.
|
|
6
|
+
* Agno is a lightweight framework for building multi-agent systems with
|
|
7
|
+
* tool use, memory, knowledge bases, and structured outputs.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const adapter = new AgnoAdapter();
|
|
11
|
+
* adapter.registerAgent("researcher", myAgnoAgent);
|
|
12
|
+
* adapter.registerTeam("dev-team", myAgnoTeam);
|
|
13
|
+
* await registry.addAdapter(adapter);
|
|
14
|
+
*
|
|
15
|
+
* Then in the orchestrator:
|
|
16
|
+
* delegateTask({ targetAgent: "agno:researcher", ... })
|
|
17
|
+
*
|
|
18
|
+
* @module AgnoAdapter
|
|
19
|
+
* @version 1.0.0
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.AgnoAdapter = void 0;
|
|
23
|
+
const base_adapter_1 = require("./base-adapter");
|
|
24
|
+
class AgnoAdapter extends base_adapter_1.BaseAdapter {
|
|
25
|
+
name = 'agno';
|
|
26
|
+
version = '1.0.0';
|
|
27
|
+
entries = new Map();
|
|
28
|
+
get capabilities() {
|
|
29
|
+
return {
|
|
30
|
+
streaming: true,
|
|
31
|
+
parallel: true,
|
|
32
|
+
bidirectional: true,
|
|
33
|
+
discovery: true,
|
|
34
|
+
authentication: false,
|
|
35
|
+
statefulSessions: true,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// --- Registration ---
|
|
39
|
+
registerAgent(agentId, agent, metadata) {
|
|
40
|
+
this.entries.set(agentId, { type: 'agent', agent });
|
|
41
|
+
this.registerLocalAgent({
|
|
42
|
+
id: agentId,
|
|
43
|
+
name: agent.name || agentId,
|
|
44
|
+
description: metadata?.description ?? `Agno Agent: ${agent.name || agentId}`,
|
|
45
|
+
capabilities: metadata?.capabilities ?? ['agent', 'tools', 'memory'],
|
|
46
|
+
status: 'available',
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
registerTeam(agentId, team, metadata) {
|
|
50
|
+
this.entries.set(agentId, { type: 'team', team });
|
|
51
|
+
const memberNames = team.members?.map((m) => m.name).join(', ') || 'unknown';
|
|
52
|
+
this.registerLocalAgent({
|
|
53
|
+
id: agentId,
|
|
54
|
+
name: team.name || agentId,
|
|
55
|
+
description: metadata?.description ?? `Agno Team: ${team.name || agentId} (members: ${memberNames})`,
|
|
56
|
+
capabilities: metadata?.capabilities ?? ['team', 'multi-agent', 'collaboration'],
|
|
57
|
+
status: 'available',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
registerFunction(agentId, fn, metadata) {
|
|
61
|
+
this.entries.set(agentId, { type: 'function', fn });
|
|
62
|
+
this.registerLocalAgent({
|
|
63
|
+
id: agentId,
|
|
64
|
+
name: agentId,
|
|
65
|
+
description: metadata?.description ?? `Agno Function: ${agentId}`,
|
|
66
|
+
capabilities: metadata?.capabilities ?? ['function'],
|
|
67
|
+
status: 'available',
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
// --- Execution ---
|
|
71
|
+
async executeAgent(agentId, payload, context) {
|
|
72
|
+
this.ensureReady();
|
|
73
|
+
const entry = this.entries.get(agentId);
|
|
74
|
+
if (!entry) {
|
|
75
|
+
return this.errorResult('AGENT_NOT_FOUND', `Agno entry "${agentId}" is not registered`, false);
|
|
76
|
+
}
|
|
77
|
+
const message = this.buildMessage(payload);
|
|
78
|
+
const startTime = Date.now();
|
|
79
|
+
try {
|
|
80
|
+
switch (entry.type) {
|
|
81
|
+
case 'agent':
|
|
82
|
+
return await this.executeAgnoAgent(entry.agent, message, payload, startTime);
|
|
83
|
+
case 'team':
|
|
84
|
+
return await this.executeAgnoTeam(entry.team, message, payload, startTime);
|
|
85
|
+
case 'function':
|
|
86
|
+
return await this.executeAgnoFunction(entry.fn, message, payload, startTime);
|
|
87
|
+
default:
|
|
88
|
+
return this.errorResult('UNKNOWN_TYPE', 'Unknown Agno entry type', false);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
return this.errorResult('AGNO_ERROR', error instanceof Error ? error.message : 'Agno execution failed', true, error);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// --- Private helpers ---
|
|
96
|
+
buildMessage(payload) {
|
|
97
|
+
if (payload.handoff?.instruction) {
|
|
98
|
+
let msg = payload.handoff.instruction;
|
|
99
|
+
if (payload.handoff.constraints?.length) {
|
|
100
|
+
msg += `\n\nConstraints: ${payload.handoff.constraints.join(', ')}`;
|
|
101
|
+
}
|
|
102
|
+
return msg;
|
|
103
|
+
}
|
|
104
|
+
return payload.params?.message || JSON.stringify(payload.params);
|
|
105
|
+
}
|
|
106
|
+
async executeAgnoAgent(agent, message, payload, startTime) {
|
|
107
|
+
const response = await agent.run(message, {
|
|
108
|
+
context: payload.blackboardSnapshot,
|
|
109
|
+
});
|
|
110
|
+
return this.successResult(this.normalizeResponse(response), Date.now() - startTime);
|
|
111
|
+
}
|
|
112
|
+
async executeAgnoTeam(team, message, payload, startTime) {
|
|
113
|
+
const response = await team.run(message, {
|
|
114
|
+
context: payload.blackboardSnapshot,
|
|
115
|
+
});
|
|
116
|
+
return this.successResult({
|
|
117
|
+
...this.normalizeResponse(response),
|
|
118
|
+
team: team.name,
|
|
119
|
+
respondingAgent: response.respondingAgent,
|
|
120
|
+
}, Date.now() - startTime);
|
|
121
|
+
}
|
|
122
|
+
async executeAgnoFunction(fn, message, payload, startTime) {
|
|
123
|
+
const result = await fn(message, payload.blackboardSnapshot);
|
|
124
|
+
if (typeof result === 'string') {
|
|
125
|
+
return this.successResult({ response: result }, Date.now() - startTime);
|
|
126
|
+
}
|
|
127
|
+
return this.successResult(this.normalizeResponse(result), Date.now() - startTime);
|
|
128
|
+
}
|
|
129
|
+
normalizeResponse(response) {
|
|
130
|
+
return {
|
|
131
|
+
response: response.content ?? '',
|
|
132
|
+
messages: response.messages,
|
|
133
|
+
toolCalls: response.toolCalls,
|
|
134
|
+
structuredOutput: response.structuredOutput,
|
|
135
|
+
usage: response.usage,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.AgnoAdapter = AgnoAdapter;
|
|
140
|
+
//# sourceMappingURL=agno-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agno-adapter.js","sourceRoot":"","sources":["../../adapters/agno-adapter.ts"],"names":[],"mappings":"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"}
|