openclaw-protocol-bridge 1.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/README.md +567 -0
- package/config/platforms.example.json +93 -0
- package/config/platforms.json +93 -0
- package/dist/adapters/a2a.d.ts +67 -0
- package/dist/adapters/a2a.d.ts.map +1 -0
- package/dist/adapters/a2a.js +256 -0
- package/dist/adapters/a2a.js.map +1 -0
- package/dist/adapters/base.d.ts +85 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +71 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/mcp.d.ts +39 -0
- package/dist/adapters/mcp.d.ts.map +1 -0
- package/dist/adapters/mcp.js +197 -0
- package/dist/adapters/mcp.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +259 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/server.d.ts +6 -0
- package/dist/cli/server.d.ts.map +1 -0
- package/dist/cli/server.js +161 -0
- package/dist/cli/server.js.map +1 -0
- package/dist/core/bridge.d.ts +99 -0
- package/dist/core/bridge.d.ts.map +1 -0
- package/dist/core/bridge.js +387 -0
- package/dist/core/bridge.js.map +1 -0
- package/dist/core/types.d.ts +257 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +48 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/examples/basic-usage.ts +142 -0
- package/examples/middleware-example.ts +131 -0
- package/package.json +88 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Protocol Bridge - Core Bridge Implementation
|
|
3
|
+
* The TCP/IP of Agent Standards
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
import { BridgeConfig, UniversalMessage, MessageResponse, AgentInfo, AgentIdentity, DiscoveryQuery, BridgeMetrics, HealthStatus, MiddlewareFunction } from './types';
|
|
7
|
+
export declare class ProtocolBridge extends EventEmitter {
|
|
8
|
+
private config;
|
|
9
|
+
private adapters;
|
|
10
|
+
private agents;
|
|
11
|
+
private middleware;
|
|
12
|
+
private metrics;
|
|
13
|
+
private startTime;
|
|
14
|
+
private running;
|
|
15
|
+
constructor(config: BridgeConfig);
|
|
16
|
+
/**
|
|
17
|
+
* Initialize the bridge
|
|
18
|
+
*/
|
|
19
|
+
initialize(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Shutdown the bridge
|
|
22
|
+
*/
|
|
23
|
+
shutdown(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Register an agent
|
|
26
|
+
*/
|
|
27
|
+
registerAgent(agent: AgentInfo): Promise<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* Unregister an agent
|
|
30
|
+
*/
|
|
31
|
+
unregisterAgent(agentId: string): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Send a message from one agent to another
|
|
34
|
+
*/
|
|
35
|
+
send(params: {
|
|
36
|
+
from: AgentIdentity;
|
|
37
|
+
to: AgentIdentity;
|
|
38
|
+
action: string;
|
|
39
|
+
params?: any;
|
|
40
|
+
metadata?: any;
|
|
41
|
+
}): Promise<MessageResponse>;
|
|
42
|
+
/**
|
|
43
|
+
* Route a message through the bridge
|
|
44
|
+
*/
|
|
45
|
+
route(message: UniversalMessage): Promise<MessageResponse>;
|
|
46
|
+
/**
|
|
47
|
+
* Execute the actual routing
|
|
48
|
+
*/
|
|
49
|
+
private executeRoute;
|
|
50
|
+
/**
|
|
51
|
+
* Discover agents
|
|
52
|
+
*/
|
|
53
|
+
discover(query?: DiscoveryQuery): Promise<AgentInfo[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Get bridge metrics
|
|
56
|
+
*/
|
|
57
|
+
getMetrics(): BridgeMetrics;
|
|
58
|
+
/**
|
|
59
|
+
* Get health status
|
|
60
|
+
*/
|
|
61
|
+
getHealth(): Promise<HealthStatus>;
|
|
62
|
+
/**
|
|
63
|
+
* Add middleware
|
|
64
|
+
*/
|
|
65
|
+
use(middleware: MiddlewareFunction): void;
|
|
66
|
+
/**
|
|
67
|
+
* Get list of registered agents
|
|
68
|
+
*/
|
|
69
|
+
getAgents(): AgentInfo[];
|
|
70
|
+
/**
|
|
71
|
+
* Get specific agent
|
|
72
|
+
*/
|
|
73
|
+
getAgent(agentId: string): AgentInfo | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* Initialize protocol adapters
|
|
76
|
+
*/
|
|
77
|
+
private initializeAdapters;
|
|
78
|
+
/**
|
|
79
|
+
* Start discovery service
|
|
80
|
+
*/
|
|
81
|
+
private startDiscovery;
|
|
82
|
+
/**
|
|
83
|
+
* Filter agents based on query
|
|
84
|
+
*/
|
|
85
|
+
private filterAgents;
|
|
86
|
+
/**
|
|
87
|
+
* Apply middleware chain
|
|
88
|
+
*/
|
|
89
|
+
private applyMiddleware;
|
|
90
|
+
/**
|
|
91
|
+
* Initialize metrics
|
|
92
|
+
*/
|
|
93
|
+
private initializeMetrics;
|
|
94
|
+
/**
|
|
95
|
+
* Update metrics
|
|
96
|
+
*/
|
|
97
|
+
private updateMetrics;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/core/bridge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,kBAAkB,EAMnB,MAAM,SAAS,CAAC;AAEjB,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,OAAO,CAAkB;gBAErB,MAAM,EAAE,YAAY;IAOhC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAc/B;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IA+BvD;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASrD;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,aAAa,CAAC;QACpB,EAAE,EAAE,aAAa,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,GAAG,CAAC;QACb,QAAQ,CAAC,EAAE,GAAG,CAAC;KAChB,GAAG,OAAO,CAAC,eAAe,CAAC;IAgB5B;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IA6BhE;;OAEG;YACW,YAAY;IAyB1B;;OAEG;IACG,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAmB5D;;OAEG;IACH,UAAU,IAAI,aAAa;IAQ3B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IA4BxC;;OAEG;IACH,GAAG,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAIzC;;OAEG;IACH,SAAS,IAAI,SAAS,EAAE;IAIxB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIhD;;OAEG;YACW,kBAAkB;IAsBhC;;OAEG;YACW,cAAc;IAsC5B;;OAEG;IACH,OAAO,CAAC,YAAY;IA+BpB;;OAEG;YACW,eAAe;IAkB7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,OAAO,CAAC,aAAa;CA2CtB"}
|
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Protocol Bridge - Core Bridge Implementation
|
|
4
|
+
* The TCP/IP of Agent Standards
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ProtocolBridge = void 0;
|
|
8
|
+
const uuid_1 = require("uuid");
|
|
9
|
+
const events_1 = require("events");
|
|
10
|
+
const mcp_1 = require("../adapters/mcp");
|
|
11
|
+
const a2a_1 = require("../adapters/a2a");
|
|
12
|
+
const types_1 = require("./types");
|
|
13
|
+
class ProtocolBridge extends events_1.EventEmitter {
|
|
14
|
+
constructor(config) {
|
|
15
|
+
super();
|
|
16
|
+
this.adapters = new Map();
|
|
17
|
+
this.agents = new Map();
|
|
18
|
+
this.middleware = [];
|
|
19
|
+
this.running = false;
|
|
20
|
+
this.config = config;
|
|
21
|
+
this.startTime = new Date();
|
|
22
|
+
this.metrics = this.initializeMetrics();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Initialize the bridge
|
|
26
|
+
*/
|
|
27
|
+
async initialize() {
|
|
28
|
+
console.log('Initializing Protocol Bridge...');
|
|
29
|
+
// Initialize protocol adapters
|
|
30
|
+
await this.initializeAdapters();
|
|
31
|
+
// Start discovery if enabled
|
|
32
|
+
if (this.config.discovery.enabled) {
|
|
33
|
+
await this.startDiscovery();
|
|
34
|
+
}
|
|
35
|
+
this.running = true;
|
|
36
|
+
this.emit('bridge:started');
|
|
37
|
+
console.log('Protocol Bridge initialized successfully');
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Shutdown the bridge
|
|
41
|
+
*/
|
|
42
|
+
async shutdown() {
|
|
43
|
+
console.log('Shutting down Protocol Bridge...');
|
|
44
|
+
// Disconnect all adapters
|
|
45
|
+
for (const [protocol, adapter] of this.adapters) {
|
|
46
|
+
await adapter.disconnect();
|
|
47
|
+
console.log(`Disconnected ${protocol} adapter`);
|
|
48
|
+
}
|
|
49
|
+
this.running = false;
|
|
50
|
+
this.emit('bridge:stopped');
|
|
51
|
+
console.log('Protocol Bridge shut down');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Register an agent
|
|
55
|
+
*/
|
|
56
|
+
async registerAgent(agent) {
|
|
57
|
+
try {
|
|
58
|
+
const adapter = this.adapters.get(agent.protocol);
|
|
59
|
+
if (!adapter) {
|
|
60
|
+
throw new types_1.BridgeError('PROTOCOL_NOT_FOUND', `Protocol ${agent.protocol} is not enabled`);
|
|
61
|
+
}
|
|
62
|
+
// Validate agent with protocol adapter
|
|
63
|
+
const isValid = await adapter.validateAgent(agent);
|
|
64
|
+
if (!isValid) {
|
|
65
|
+
throw new types_1.BridgeError('VALIDATION_FAILED', `Failed to validate agent ${agent.id}`);
|
|
66
|
+
}
|
|
67
|
+
// Store agent
|
|
68
|
+
agent.status = 'active';
|
|
69
|
+
agent.lastSeen = new Date();
|
|
70
|
+
this.agents.set(agent.id, agent);
|
|
71
|
+
this.emit('agent:registered', agent);
|
|
72
|
+
console.log(`Agent registered: ${agent.id} (${agent.protocol})`);
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error(`Failed to register agent ${agent.id}:`, error);
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Unregister an agent
|
|
82
|
+
*/
|
|
83
|
+
async unregisterAgent(agentId) {
|
|
84
|
+
const agent = this.agents.get(agentId);
|
|
85
|
+
if (agent) {
|
|
86
|
+
this.agents.delete(agentId);
|
|
87
|
+
this.emit('agent:unregistered', agent);
|
|
88
|
+
console.log(`Agent unregistered: ${agentId}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Send a message from one agent to another
|
|
93
|
+
*/
|
|
94
|
+
async send(params) {
|
|
95
|
+
// Create universal message
|
|
96
|
+
const message = {
|
|
97
|
+
id: (0, uuid_1.v4)(),
|
|
98
|
+
timestamp: new Date(),
|
|
99
|
+
from: params.from,
|
|
100
|
+
to: params.to,
|
|
101
|
+
type: 'request',
|
|
102
|
+
action: params.action,
|
|
103
|
+
payload: params.params || {},
|
|
104
|
+
metadata: params.metadata,
|
|
105
|
+
};
|
|
106
|
+
return await this.route(message);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Route a message through the bridge
|
|
110
|
+
*/
|
|
111
|
+
async route(message) {
|
|
112
|
+
const startTime = Date.now();
|
|
113
|
+
try {
|
|
114
|
+
// Apply middleware
|
|
115
|
+
let response;
|
|
116
|
+
const finalHandler = async (msg) => {
|
|
117
|
+
return await this.executeRoute(msg);
|
|
118
|
+
};
|
|
119
|
+
if (this.middleware.length > 0) {
|
|
120
|
+
response = await this.applyMiddleware(message, finalHandler);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
response = await finalHandler(message);
|
|
124
|
+
}
|
|
125
|
+
// Update metrics
|
|
126
|
+
const latency = Date.now() - startTime;
|
|
127
|
+
this.updateMetrics(message, response, latency);
|
|
128
|
+
this.emit('message:routed', { message, response, latency });
|
|
129
|
+
return response;
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
this.emit('message:failed', { message, error });
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Execute the actual routing
|
|
138
|
+
*/
|
|
139
|
+
async executeRoute(message) {
|
|
140
|
+
// Get target agent
|
|
141
|
+
const targetAgent = this.agents.get(message.to.id);
|
|
142
|
+
if (!targetAgent) {
|
|
143
|
+
throw new types_1.RoutingError(`Agent not found: ${message.to.id}`);
|
|
144
|
+
}
|
|
145
|
+
// Get source and target adapters
|
|
146
|
+
const sourceAdapter = this.adapters.get(message.from.protocol);
|
|
147
|
+
const targetAdapter = this.adapters.get(message.to.protocol);
|
|
148
|
+
if (!sourceAdapter || !targetAdapter) {
|
|
149
|
+
throw new types_1.RoutingError('Protocol adapter not found');
|
|
150
|
+
}
|
|
151
|
+
// If protocols are the same, just forward
|
|
152
|
+
if (message.from.protocol === message.to.protocol) {
|
|
153
|
+
return await targetAdapter.send(message);
|
|
154
|
+
}
|
|
155
|
+
// Translate between protocols
|
|
156
|
+
// The message is already in universal format, so we just need to send it
|
|
157
|
+
return await targetAdapter.send(message);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Discover agents
|
|
161
|
+
*/
|
|
162
|
+
async discover(query) {
|
|
163
|
+
let agents = [];
|
|
164
|
+
// Query all enabled protocol adapters
|
|
165
|
+
for (const [protocol, adapter] of this.adapters) {
|
|
166
|
+
if (adapter.isEnabled()) {
|
|
167
|
+
const protocolAgents = await adapter.discover();
|
|
168
|
+
agents = agents.concat(protocolAgents);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Filter based on query
|
|
172
|
+
if (query) {
|
|
173
|
+
agents = this.filterAgents(agents, query);
|
|
174
|
+
}
|
|
175
|
+
return agents;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get bridge metrics
|
|
179
|
+
*/
|
|
180
|
+
getMetrics() {
|
|
181
|
+
const uptime = Math.floor((Date.now() - this.startTime.getTime()) / 1000);
|
|
182
|
+
return {
|
|
183
|
+
...this.metrics,
|
|
184
|
+
uptime,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get health status
|
|
189
|
+
*/
|
|
190
|
+
async getHealth() {
|
|
191
|
+
const protocols = {};
|
|
192
|
+
for (const [protocol, adapter] of this.adapters) {
|
|
193
|
+
const isHealthy = await adapter.healthCheck();
|
|
194
|
+
protocols[protocol] = isHealthy ? 'active' : 'inactive';
|
|
195
|
+
}
|
|
196
|
+
const activeAgents = Array.from(this.agents.values()).filter((a) => a.status === 'active').length;
|
|
197
|
+
const inactiveAgents = this.agents.size - activeAgents;
|
|
198
|
+
const uptime = Math.floor((Date.now() - this.startTime.getTime()) / 1000);
|
|
199
|
+
return {
|
|
200
|
+
status: this.running ? 'healthy' : 'unhealthy',
|
|
201
|
+
uptime,
|
|
202
|
+
protocols,
|
|
203
|
+
agents: {
|
|
204
|
+
registered: this.agents.size,
|
|
205
|
+
active: activeAgents,
|
|
206
|
+
inactive: inactiveAgents,
|
|
207
|
+
},
|
|
208
|
+
lastCheck: new Date(),
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Add middleware
|
|
213
|
+
*/
|
|
214
|
+
use(middleware) {
|
|
215
|
+
this.middleware.push(middleware);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Get list of registered agents
|
|
219
|
+
*/
|
|
220
|
+
getAgents() {
|
|
221
|
+
return Array.from(this.agents.values());
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get specific agent
|
|
225
|
+
*/
|
|
226
|
+
getAgent(agentId) {
|
|
227
|
+
return this.agents.get(agentId);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Initialize protocol adapters
|
|
231
|
+
*/
|
|
232
|
+
async initializeAdapters() {
|
|
233
|
+
// MCP
|
|
234
|
+
if (this.config.protocols.mcp?.enabled) {
|
|
235
|
+
const mcpAdapter = new mcp_1.MCPAdapter(this.config.protocols.mcp);
|
|
236
|
+
await mcpAdapter.initialize();
|
|
237
|
+
await mcpAdapter.connect();
|
|
238
|
+
this.adapters.set('mcp', mcpAdapter);
|
|
239
|
+
console.log('MCP adapter initialized');
|
|
240
|
+
}
|
|
241
|
+
// A2A
|
|
242
|
+
if (this.config.protocols.a2a?.enabled) {
|
|
243
|
+
const a2aAdapter = new a2a_1.A2AAdapter(this.config.protocols.a2a);
|
|
244
|
+
await a2aAdapter.initialize();
|
|
245
|
+
await a2aAdapter.connect();
|
|
246
|
+
this.adapters.set('a2a', a2aAdapter);
|
|
247
|
+
console.log('A2A adapter initialized');
|
|
248
|
+
}
|
|
249
|
+
// TODO: Add more protocol adapters (ACP, LangChain, etc.)
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Start discovery service
|
|
253
|
+
*/
|
|
254
|
+
async startDiscovery() {
|
|
255
|
+
const interval = this.config.discovery.interval || 30000; // 30 seconds default
|
|
256
|
+
setInterval(async () => {
|
|
257
|
+
try {
|
|
258
|
+
// Discover agents from all protocols
|
|
259
|
+
const discoveredAgents = await this.discover();
|
|
260
|
+
// Update agent status
|
|
261
|
+
for (const agent of discoveredAgents) {
|
|
262
|
+
if (!this.agents.has(agent.id)) {
|
|
263
|
+
// New agent discovered
|
|
264
|
+
await this.registerAgent(agent);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
// Update existing agent
|
|
268
|
+
const existing = this.agents.get(agent.id);
|
|
269
|
+
existing.lastSeen = new Date();
|
|
270
|
+
existing.status = 'active';
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// Mark stale agents as inactive
|
|
274
|
+
const ttl = this.config.discovery.ttl || 60000; // 60 seconds default
|
|
275
|
+
const now = Date.now();
|
|
276
|
+
for (const [id, agent] of this.agents) {
|
|
277
|
+
if (agent.lastSeen && now - agent.lastSeen.getTime() > ttl) {
|
|
278
|
+
agent.status = 'inactive';
|
|
279
|
+
this.emit('agent:status_changed', agent);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
console.error('Discovery error:', error);
|
|
285
|
+
}
|
|
286
|
+
}, interval);
|
|
287
|
+
console.log(`Discovery service started (interval: ${interval}ms)`);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Filter agents based on query
|
|
291
|
+
*/
|
|
292
|
+
filterAgents(agents, query) {
|
|
293
|
+
return agents.filter((agent) => {
|
|
294
|
+
// Filter by capabilities
|
|
295
|
+
if (query.capabilities && query.capabilities.length > 0) {
|
|
296
|
+
const hasCapabilities = query.capabilities.every((cap) => agent.capabilities.some((c) => c.name === cap));
|
|
297
|
+
if (!hasCapabilities)
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
// Filter by protocols
|
|
301
|
+
if (query.protocols && query.protocols.length > 0) {
|
|
302
|
+
if (!query.protocols.includes(agent.protocol))
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
// Filter by max cost
|
|
306
|
+
if (query.maxCost !== undefined) {
|
|
307
|
+
const totalCost = agent.capabilities.reduce((sum, c) => sum + (c.cost || 0), 0);
|
|
308
|
+
if (totalCost > query.maxCost)
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
// Filter by max latency
|
|
312
|
+
if (query.maxLatency !== undefined) {
|
|
313
|
+
const maxLatency = Math.max(...agent.capabilities.map((c) => c.latency || 0));
|
|
314
|
+
if (maxLatency > query.maxLatency)
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
return true;
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Apply middleware chain
|
|
322
|
+
*/
|
|
323
|
+
async applyMiddleware(message, finalHandler) {
|
|
324
|
+
let index = 0;
|
|
325
|
+
const next = async (msg) => {
|
|
326
|
+
if (index >= this.middleware.length) {
|
|
327
|
+
return await finalHandler(msg);
|
|
328
|
+
}
|
|
329
|
+
const middleware = this.middleware[index++];
|
|
330
|
+
return await middleware(msg, next);
|
|
331
|
+
};
|
|
332
|
+
return await next(message);
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Initialize metrics
|
|
336
|
+
*/
|
|
337
|
+
initializeMetrics() {
|
|
338
|
+
return {
|
|
339
|
+
totalMessages: 0,
|
|
340
|
+
successRate: 0,
|
|
341
|
+
averageLatency: 0,
|
|
342
|
+
protocolStats: {},
|
|
343
|
+
agentStats: {
|
|
344
|
+
registered: 0,
|
|
345
|
+
active: 0,
|
|
346
|
+
inactive: 0,
|
|
347
|
+
},
|
|
348
|
+
uptime: 0,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Update metrics
|
|
353
|
+
*/
|
|
354
|
+
updateMetrics(message, response, latency) {
|
|
355
|
+
this.metrics.totalMessages++;
|
|
356
|
+
// Update protocol stats
|
|
357
|
+
const protocol = message.to.protocol;
|
|
358
|
+
if (!this.metrics.protocolStats[protocol]) {
|
|
359
|
+
this.metrics.protocolStats[protocol] = {
|
|
360
|
+
sent: 0,
|
|
361
|
+
received: 0,
|
|
362
|
+
errors: 0,
|
|
363
|
+
averageLatency: 0,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
const stats = this.metrics.protocolStats[protocol];
|
|
367
|
+
stats.sent++;
|
|
368
|
+
if (response.status === 'success') {
|
|
369
|
+
stats.received++;
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
stats.errors++;
|
|
373
|
+
}
|
|
374
|
+
// Update average latency
|
|
375
|
+
stats.averageLatency =
|
|
376
|
+
(stats.averageLatency * (stats.sent - 1) + latency) / stats.sent;
|
|
377
|
+
// Update overall average latency
|
|
378
|
+
this.metrics.averageLatency =
|
|
379
|
+
(this.metrics.averageLatency * (this.metrics.totalMessages - 1) + latency) /
|
|
380
|
+
this.metrics.totalMessages;
|
|
381
|
+
// Update success rate
|
|
382
|
+
const totalSuccess = Object.values(this.metrics.protocolStats).reduce((sum, s) => sum + s.received, 0);
|
|
383
|
+
this.metrics.successRate = totalSuccess / this.metrics.totalMessages;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
exports.ProtocolBridge = ProtocolBridge;
|
|
387
|
+
//# sourceMappingURL=bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/core/bridge.ts"],"names":[],"mappings":"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"}
|