@claude-flow/plugin-agent-federation 1.0.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -0
- package/dist/application/federation-breaker-service.d.ts +182 -0
- package/dist/application/federation-breaker-service.d.ts.map +1 -0
- package/dist/application/federation-breaker-service.js +251 -0
- package/dist/application/federation-breaker-service.js.map +1 -0
- package/dist/application/federation-coordinator.d.ts +166 -0
- package/dist/application/federation-coordinator.d.ts.map +1 -0
- package/dist/application/federation-coordinator.js +412 -0
- package/dist/application/federation-coordinator.js.map +1 -0
- package/dist/application/inbound-dispatcher.d.ts +59 -0
- package/dist/application/inbound-dispatcher.d.ts.map +1 -0
- package/dist/application/inbound-dispatcher.js +96 -0
- package/dist/application/inbound-dispatcher.js.map +1 -0
- package/dist/application/policy-engine.d.ts +41 -0
- package/dist/application/policy-engine.d.ts.map +1 -0
- package/dist/application/policy-engine.js +184 -0
- package/dist/application/policy-engine.js.map +1 -0
- package/dist/application/spend-reporter.d.ts +150 -0
- package/dist/application/spend-reporter.d.ts.map +1 -0
- package/dist/application/spend-reporter.js +128 -0
- package/dist/application/spend-reporter.js.map +1 -0
- package/dist/application/trust-evaluator.d.ts +42 -0
- package/dist/application/trust-evaluator.d.ts.map +1 -0
- package/dist/application/trust-evaluator.js +132 -0
- package/dist/application/trust-evaluator.js.map +1 -0
- package/dist/bin.d.ts +13 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +189 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli-commands.d.ts +7 -0
- package/dist/cli-commands.d.ts.map +1 -0
- package/dist/cli-commands.js +198 -0
- package/dist/cli-commands.js.map +1 -0
- package/dist/domain/entities/federation-envelope.d.ts +45 -0
- package/dist/domain/entities/federation-envelope.d.ts.map +1 -0
- package/dist/domain/entities/federation-envelope.js +71 -0
- package/dist/domain/entities/federation-envelope.js.map +1 -0
- package/dist/domain/entities/federation-node.d.ts +104 -0
- package/dist/domain/entities/federation-node.d.ts.map +1 -0
- package/dist/domain/entities/federation-node.js +152 -0
- package/dist/domain/entities/federation-node.js.map +1 -0
- package/dist/domain/entities/federation-session.d.ts +55 -0
- package/dist/domain/entities/federation-session.d.ts.map +1 -0
- package/dist/domain/entities/federation-session.js +105 -0
- package/dist/domain/entities/federation-session.js.map +1 -0
- package/dist/domain/entities/trust-level.d.ts +17 -0
- package/dist/domain/entities/trust-level.d.ts.map +1 -0
- package/dist/domain/entities/trust-level.js +35 -0
- package/dist/domain/entities/trust-level.js.map +1 -0
- package/dist/domain/services/audit-service.d.ts +69 -0
- package/dist/domain/services/audit-service.d.ts.map +1 -0
- package/dist/domain/services/audit-service.js +149 -0
- package/dist/domain/services/audit-service.js.map +1 -0
- package/dist/domain/services/discovery-service.d.ts +51 -0
- package/dist/domain/services/discovery-service.d.ts.map +1 -0
- package/dist/domain/services/discovery-service.js +140 -0
- package/dist/domain/services/discovery-service.js.map +1 -0
- package/dist/domain/services/handshake-service.d.ts +48 -0
- package/dist/domain/services/handshake-service.d.ts.map +1 -0
- package/dist/domain/services/handshake-service.js +94 -0
- package/dist/domain/services/handshake-service.js.map +1 -0
- package/dist/domain/services/pii-pipeline-service.d.ts +65 -0
- package/dist/domain/services/pii-pipeline-service.d.ts.map +1 -0
- package/dist/domain/services/pii-pipeline-service.js +208 -0
- package/dist/domain/services/pii-pipeline-service.js.map +1 -0
- package/dist/domain/services/routing-service.d.ts +51 -0
- package/dist/domain/services/routing-service.d.ts.map +1 -0
- package/dist/domain/services/routing-service.js +147 -0
- package/dist/domain/services/routing-service.js.map +1 -0
- package/dist/domain/value-objects/federation-budget.d.ts +89 -0
- package/dist/domain/value-objects/federation-budget.d.ts.map +1 -0
- package/dist/domain/value-objects/federation-budget.js +165 -0
- package/dist/domain/value-objects/federation-budget.js.map +1 -0
- package/dist/domain/value-objects/federation-node-state.d.ts +92 -0
- package/dist/domain/value-objects/federation-node-state.d.ts.map +1 -0
- package/dist/domain/value-objects/federation-node-state.js +100 -0
- package/dist/domain/value-objects/federation-node-state.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-tools.d.ts +8 -0
- package/dist/mcp-tools.d.ts.map +1 -0
- package/dist/mcp-tools.js +343 -0
- package/dist/mcp-tools.js.map +1 -0
- package/dist/plugin.d.ts +18 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +376 -0
- package/dist/plugin.js.map +1 -0
- package/package.json +44 -0
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import * as ed from '@noble/ed25519';
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
// @noble/ed25519 v2 needs a sync sha512 wired explicitly.
|
|
6
|
+
ed.etc.sha512Sync = (...m) => {
|
|
7
|
+
const h = createHash('sha512');
|
|
8
|
+
for (const x of m)
|
|
9
|
+
h.update(x);
|
|
10
|
+
return h.digest();
|
|
11
|
+
};
|
|
12
|
+
import { FederationCoordinator } from './application/federation-coordinator.js';
|
|
13
|
+
import { DiscoveryService } from './domain/services/discovery-service.js';
|
|
14
|
+
import { HandshakeService } from './domain/services/handshake-service.js';
|
|
15
|
+
import { RoutingService } from './domain/services/routing-service.js';
|
|
16
|
+
import { AuditService } from './domain/services/audit-service.js';
|
|
17
|
+
import { PIIPipelineService } from './domain/services/pii-pipeline-service.js';
|
|
18
|
+
import { TrustEvaluator } from './application/trust-evaluator.js';
|
|
19
|
+
import { PolicyEngine } from './application/policy-engine.js';
|
|
20
|
+
import { getTrustLevelLabel } from './domain/entities/trust-level.js';
|
|
21
|
+
import { loadQuicTransport, } from 'agentic-flow/transport/loader';
|
|
22
|
+
import { dispatchInbound } from './application/inbound-dispatcher.js';
|
|
23
|
+
import { createMcpTools } from './mcp-tools.js';
|
|
24
|
+
import { createCliCommands } from './cli-commands.js';
|
|
25
|
+
export class AgentFederationPlugin {
|
|
26
|
+
name = '@claude-flow/plugin-agent-federation';
|
|
27
|
+
version = '1.0.0-alpha.1';
|
|
28
|
+
description = 'Cross-installation agent federation with PII protection and AI defence';
|
|
29
|
+
author = 'Claude Flow Team';
|
|
30
|
+
dependencies = ['@claude-flow/security', '@claude-flow/aidefence'];
|
|
31
|
+
coordinator = null;
|
|
32
|
+
context = null;
|
|
33
|
+
// ADR-104: live transport instance, created in initialize() and torn
|
|
34
|
+
// down in shutdown(). Null when transport is disabled (the legacy
|
|
35
|
+
// in-process behavior — preserves backward compat for tests that
|
|
36
|
+
// don't supply a port).
|
|
37
|
+
transport = null;
|
|
38
|
+
async initialize(context) {
|
|
39
|
+
this.context = context;
|
|
40
|
+
const config = context.config;
|
|
41
|
+
const nodeId = config['nodeId'] ?? `node-${Date.now().toString(36)}`;
|
|
42
|
+
const endpoint = config['endpoint'] ?? 'ws://localhost:9100';
|
|
43
|
+
const complianceMode = config['complianceMode'] ?? 'none';
|
|
44
|
+
const staticPeers = config['staticPeers'] ?? [];
|
|
45
|
+
const hashSalt = config['hashSalt'] ?? `salt-${nodeId}`;
|
|
46
|
+
// ADR-095 G2: real Ed25519 keypair instead of empty publicKey + stub
|
|
47
|
+
// signatures. Persist to .claude-flow/federation/key-<nodeId>.json so
|
|
48
|
+
// the same node identity survives restarts. Audit log
|
|
49
|
+
// audit_1776483149979 flagged the previous "verifySignature returns
|
|
50
|
+
// true unconditionally" as a critical authn bypass; this closes it.
|
|
51
|
+
const keyDir = join(process.cwd(), '.claude-flow', 'federation');
|
|
52
|
+
const keyPath = join(keyDir, `key-${nodeId}.json`);
|
|
53
|
+
let privateKey;
|
|
54
|
+
let publicKeyHex;
|
|
55
|
+
try {
|
|
56
|
+
if (existsSync(keyPath)) {
|
|
57
|
+
const stored = JSON.parse(readFileSync(keyPath, 'utf-8'));
|
|
58
|
+
privateKey = new Uint8Array(Buffer.from(stored.privateKey, 'hex'));
|
|
59
|
+
publicKeyHex = stored.publicKey;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
privateKey = ed.utils.randomPrivateKey();
|
|
63
|
+
const pk = ed.getPublicKey(privateKey);
|
|
64
|
+
publicKeyHex = Buffer.from(pk).toString('hex');
|
|
65
|
+
if (!existsSync(keyDir))
|
|
66
|
+
mkdirSync(keyDir, { recursive: true, mode: 0o700 });
|
|
67
|
+
writeFileSync(keyPath, JSON.stringify({
|
|
68
|
+
nodeId,
|
|
69
|
+
privateKey: Buffer.from(privateKey).toString('hex'),
|
|
70
|
+
publicKey: publicKeyHex,
|
|
71
|
+
createdAt: new Date().toISOString(),
|
|
72
|
+
}, null, 2), { mode: 0o600 });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
// Fall back to ephemeral key if persistence fails — still real crypto.
|
|
77
|
+
privateKey = ed.utils.randomPrivateKey();
|
|
78
|
+
const pk = ed.getPublicKey(privateKey);
|
|
79
|
+
publicKeyHex = Buffer.from(pk).toString('hex');
|
|
80
|
+
context.logger.warn(`Federation: could not persist keypair (${err instanceof Error ? err.message : err}); using ephemeral key for this session`);
|
|
81
|
+
}
|
|
82
|
+
const coordConfig = {
|
|
83
|
+
nodeId,
|
|
84
|
+
publicKey: publicKeyHex,
|
|
85
|
+
endpoint,
|
|
86
|
+
capabilities: ['send', 'receive', 'query-redacted', 'status', 'ping', 'discovery'],
|
|
87
|
+
};
|
|
88
|
+
const generateId = () => `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
89
|
+
// ADR-095 G2: real signing + verification using @noble/ed25519. The
|
|
90
|
+
// sign* helpers use this node's private key; verify* helpers accept
|
|
91
|
+
// a peer's public key over the wire and check the signature with
|
|
92
|
+
// ed.verify(). No "return true" stubs.
|
|
93
|
+
const signBytes = (msg) => {
|
|
94
|
+
const sig = ed.sign(new TextEncoder().encode(msg), privateKey);
|
|
95
|
+
return Buffer.from(sig).toString('hex');
|
|
96
|
+
};
|
|
97
|
+
const verifyBytes = (msg, signatureHex, peerPublicKeyHex) => {
|
|
98
|
+
try {
|
|
99
|
+
if (!signatureHex || !peerPublicKeyHex)
|
|
100
|
+
return false;
|
|
101
|
+
return ed.verify(Buffer.from(signatureHex, 'hex'), new TextEncoder().encode(msg), Buffer.from(peerPublicKeyHex, 'hex'));
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
// Canonical manifest serialization for signing — sorts keys to keep
|
|
108
|
+
// sign/verify deterministic. Excludes the signature field itself.
|
|
109
|
+
const canonicalize = (obj) => {
|
|
110
|
+
const stripped = {};
|
|
111
|
+
for (const k of Object.keys(obj).sort()) {
|
|
112
|
+
if (k === 'signature')
|
|
113
|
+
continue;
|
|
114
|
+
const v = obj[k];
|
|
115
|
+
stripped[k] = (v && typeof v === 'object' && !Array.isArray(v))
|
|
116
|
+
? JSON.parse(canonicalize(v))
|
|
117
|
+
: v;
|
|
118
|
+
}
|
|
119
|
+
return JSON.stringify(stripped);
|
|
120
|
+
};
|
|
121
|
+
const discovery = new DiscoveryService({
|
|
122
|
+
signManifest: async (manifest) => signBytes(canonicalize(manifest)),
|
|
123
|
+
verifyManifest: async (manifest) => {
|
|
124
|
+
const peerPub = manifest.publicKey;
|
|
125
|
+
const sig = manifest.signature;
|
|
126
|
+
if (!peerPub || !sig)
|
|
127
|
+
return false;
|
|
128
|
+
return verifyBytes(canonicalize(manifest), sig, peerPub);
|
|
129
|
+
},
|
|
130
|
+
onPeerDiscovered: (node) => {
|
|
131
|
+
context.logger.info(`Peer discovered: ${node.nodeId} at ${node.endpoint}`);
|
|
132
|
+
},
|
|
133
|
+
}, { staticPeers });
|
|
134
|
+
const handshake = new HandshakeService({
|
|
135
|
+
generateSessionId: generateId,
|
|
136
|
+
generateSessionToken: () => `token-${generateId()}`,
|
|
137
|
+
generateNonce: () => `nonce-${Math.random().toString(36).slice(2)}`,
|
|
138
|
+
signChallenge: async (nonce) => signBytes(nonce),
|
|
139
|
+
verifySignature: async (nonce, signature, peerPublicKey) => verifyBytes(nonce, signature, peerPublicKey),
|
|
140
|
+
getLocalNodeId: () => nodeId,
|
|
141
|
+
getLocalPublicKey: () => publicKeyHex,
|
|
142
|
+
getLocalCapabilities: () => coordConfig.capabilities,
|
|
143
|
+
});
|
|
144
|
+
const piiPipeline = new PIIPipelineService({ hashFunction: (val, salt) => `hash-${salt}-${val.slice(0, 4)}` }, { hashSalt });
|
|
145
|
+
const auditEvents = [];
|
|
146
|
+
const audit = new AuditService({
|
|
147
|
+
generateEventId: generateId,
|
|
148
|
+
getLocalNodeId: () => nodeId,
|
|
149
|
+
persistEvent: async (event) => { auditEvents.push(event); },
|
|
150
|
+
queryEvents: async (query) => {
|
|
151
|
+
return auditEvents
|
|
152
|
+
.filter(e => {
|
|
153
|
+
if (query.eventType && e['eventType'] !== query.eventType)
|
|
154
|
+
return false;
|
|
155
|
+
if (query.severity && e['severity'] !== query.severity)
|
|
156
|
+
return false;
|
|
157
|
+
if (query.category && e['category'] !== query.category)
|
|
158
|
+
return false;
|
|
159
|
+
return true;
|
|
160
|
+
})
|
|
161
|
+
.slice(query.offset ?? 0, (query.offset ?? 0) + (query.limit ?? 100));
|
|
162
|
+
},
|
|
163
|
+
onAuditEvent: (event) => {
|
|
164
|
+
context.eventBus.emit('federation:audit', event);
|
|
165
|
+
},
|
|
166
|
+
}, { complianceMode });
|
|
167
|
+
const trustEvaluator = new TrustEvaluator({
|
|
168
|
+
onTrustChange: (nid, result) => {
|
|
169
|
+
context.logger.info(`Trust change for ${nid}: ${getTrustLevelLabel(result.previousLevel)} -> ${getTrustLevelLabel(result.newLevel)}`);
|
|
170
|
+
context.eventBus.emit('federation:trust-change', { nodeId: nid, ...result });
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
const policyEngine = new PolicyEngine({ checkClaim: () => true });
|
|
174
|
+
const sessions = new Map();
|
|
175
|
+
// ADR-104: load wire transport. WebSocket fallback by default; native
|
|
176
|
+
// QUIC when AGENTIC_FLOW_QUIC_NATIVE=1 + binding installed. Failures
|
|
177
|
+
// here downgrade to in-process noop (logged), preserving backward
|
|
178
|
+
// compat for tests/environments without ws available.
|
|
179
|
+
let transport = null;
|
|
180
|
+
try {
|
|
181
|
+
transport = await loadQuicTransport({
|
|
182
|
+
serverName: nodeId,
|
|
183
|
+
maxIdleTimeoutMs: 30_000,
|
|
184
|
+
maxConcurrentStreams: 100,
|
|
185
|
+
enable0Rtt: true,
|
|
186
|
+
});
|
|
187
|
+
this.transport = transport;
|
|
188
|
+
context.logger.info(`Federation transport loaded: ${nodeId}`);
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
context.logger.warn(`Federation transport unavailable (${err instanceof Error ? err.message : err}); ` +
|
|
192
|
+
`falling back to in-process routing — federation_send will log only`);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Resolve a peer's nodeId to a wire address suitable for
|
|
196
|
+
* transport.send(). Looks up the discovery registry to get the
|
|
197
|
+
* peer's published endpoint, then strips the protocol prefix to
|
|
198
|
+
* get a `host:port` string.
|
|
199
|
+
*
|
|
200
|
+
* Endpoint shapes accepted:
|
|
201
|
+
* - "ws://host:port" → "host:port"
|
|
202
|
+
* - "tailscale://host:port" → "host:port"
|
|
203
|
+
* - "host:port" → "host:port" (passthrough)
|
|
204
|
+
*/
|
|
205
|
+
const resolveAddress = (targetNodeId) => {
|
|
206
|
+
const peer = discovery.getPeer(targetNodeId);
|
|
207
|
+
if (!peer)
|
|
208
|
+
return null;
|
|
209
|
+
const ep = peer.endpoint;
|
|
210
|
+
const m = ep.match(/^(?:[a-z]+:\/\/)?(.+)$/);
|
|
211
|
+
return m ? m[1] : ep;
|
|
212
|
+
};
|
|
213
|
+
const routing = new RoutingService({
|
|
214
|
+
generateEnvelopeId: generateId,
|
|
215
|
+
generateNonce: () => `nonce-${Math.random().toString(36).slice(2)}`,
|
|
216
|
+
signEnvelope: (payload, token) => `hmac-${token.slice(0, 6)}-${payload.length}`,
|
|
217
|
+
verifyEnvelope: () => true,
|
|
218
|
+
scanPii: (text, trustLevel) => {
|
|
219
|
+
const result = piiPipeline.transform(text, trustLevel);
|
|
220
|
+
return {
|
|
221
|
+
transformedText: result.transformedText,
|
|
222
|
+
scanResult: {
|
|
223
|
+
scanned: true,
|
|
224
|
+
piiFound: result.detections.length > 0,
|
|
225
|
+
detections: result.detections.map(d => ({
|
|
226
|
+
type: d.type,
|
|
227
|
+
action: result.actionsApplied.find(a => a.type === d.type)?.action ?? 'pass',
|
|
228
|
+
confidence: d.confidence,
|
|
229
|
+
})),
|
|
230
|
+
actionsApplied: result.actionsApplied.map(a => a.action),
|
|
231
|
+
scanDurationMs: 0,
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
},
|
|
235
|
+
sendToNode: async (targetNodeId, envelope) => {
|
|
236
|
+
// ADR-104: real wire send via the loaded transport. If the
|
|
237
|
+
// transport failed to load OR the peer's address can't be
|
|
238
|
+
// resolved, log + return (the upstream RoutingService.send
|
|
239
|
+
// already wraps this in try/catch and returns a RoutingResult
|
|
240
|
+
// with the error to the caller).
|
|
241
|
+
if (!transport) {
|
|
242
|
+
context.logger.debug(`Federation send (in-process noop): ${envelope.envelopeId} → ${targetNodeId}`);
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
const address = resolveAddress(targetNodeId);
|
|
246
|
+
if (!address) {
|
|
247
|
+
context.logger.warn(`Federation send aborted: peer ${targetNodeId} not in discovery registry`);
|
|
248
|
+
throw new Error(`PEER_UNKNOWN: ${targetNodeId}`);
|
|
249
|
+
}
|
|
250
|
+
const message = {
|
|
251
|
+
id: envelope.envelopeId,
|
|
252
|
+
type: envelope.messageType,
|
|
253
|
+
payload: envelope,
|
|
254
|
+
metadata: {
|
|
255
|
+
sourceNodeId: envelope.sourceNodeId,
|
|
256
|
+
targetNodeId: envelope.targetNodeId,
|
|
257
|
+
sessionId: envelope.sessionId,
|
|
258
|
+
},
|
|
259
|
+
};
|
|
260
|
+
await transport.send(address, message);
|
|
261
|
+
context.logger.debug(`Federation send → ${address} (envelope=${envelope.envelopeId}, type=${envelope.messageType})`);
|
|
262
|
+
},
|
|
263
|
+
getActiveSessions: () => Array.from(sessions.values()).filter(s => s.active),
|
|
264
|
+
getLocalNodeId: () => nodeId,
|
|
265
|
+
});
|
|
266
|
+
this.coordinator = new FederationCoordinator(coordConfig, discovery, handshake, routing, audit, piiPipeline, trustEvaluator, policyEngine);
|
|
267
|
+
context.services.register('federation:coordinator', this.coordinator);
|
|
268
|
+
context.services.register('federation:discovery', discovery);
|
|
269
|
+
context.services.register('federation:audit', audit);
|
|
270
|
+
context.services.register('federation:pii', piiPipeline);
|
|
271
|
+
context.services.register('federation:trust', trustEvaluator);
|
|
272
|
+
context.services.register('federation:policy', policyEngine);
|
|
273
|
+
context.services.register('federation:routing', routing);
|
|
274
|
+
if (transport) {
|
|
275
|
+
context.services.register('federation:transport', transport);
|
|
276
|
+
}
|
|
277
|
+
// ADR-104: bind the inbound listener if config supplies a port. The
|
|
278
|
+
// port is OPTIONAL — peers that only initiate outbound (no inbound
|
|
279
|
+
// accept) leave it unset. Common config: port 9100 for tailscale
|
|
280
|
+
// hosts. Defaults to "no listener" so existing tests/configs don't
|
|
281
|
+
// need to free a port.
|
|
282
|
+
const listenPort = config['port'];
|
|
283
|
+
if (transport && typeof listenPort === 'number' && transport.listen) {
|
|
284
|
+
const listenHost = config['host'] ?? '0.0.0.0';
|
|
285
|
+
try {
|
|
286
|
+
await transport.listen(listenPort, listenHost);
|
|
287
|
+
context.logger.info(`Federation listening on ${listenHost}:${listenPort}`);
|
|
288
|
+
}
|
|
289
|
+
catch (err) {
|
|
290
|
+
context.logger.error(`Federation listener bind failed on ${listenHost}:${listenPort}: ` +
|
|
291
|
+
(err instanceof Error ? err.message : String(err)));
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// ADR-109: subscribe to inbound messages. transport.onMessage was
|
|
295
|
+
// added in agentic-flow@2.0.12-fix.3 — older builds gracefully
|
|
296
|
+
// degrade (optional method, no-op via the ?? guard).
|
|
297
|
+
if (transport && typeof transport.onMessage === 'function') {
|
|
298
|
+
transport.onMessage(async (address, message) => {
|
|
299
|
+
await dispatchInbound(address, message, {
|
|
300
|
+
discovery,
|
|
301
|
+
audit,
|
|
302
|
+
eventBus: context.eventBus,
|
|
303
|
+
logger: context.logger,
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
context.logger.debug('Federation inbound dispatcher subscribed');
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
context.logger.warn('Federation transport does not expose onMessage(); inbound bytes will queue but not dispatch. ' +
|
|
310
|
+
'Upgrade agentic-flow to >= 2.0.12-fix.3.');
|
|
311
|
+
}
|
|
312
|
+
context.logger.info('Agent Federation plugin initialized');
|
|
313
|
+
}
|
|
314
|
+
async shutdown() {
|
|
315
|
+
if (this.coordinator) {
|
|
316
|
+
await this.coordinator.shutdown();
|
|
317
|
+
this.coordinator = null;
|
|
318
|
+
}
|
|
319
|
+
if (this.transport) {
|
|
320
|
+
try {
|
|
321
|
+
await this.transport.close();
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
this.context?.logger.warn(`Federation transport close error: ${err instanceof Error ? err.message : err}`);
|
|
325
|
+
}
|
|
326
|
+
this.transport = null;
|
|
327
|
+
}
|
|
328
|
+
this.context?.logger.info('Agent Federation plugin shut down');
|
|
329
|
+
this.context = null;
|
|
330
|
+
}
|
|
331
|
+
registerMCPTools() {
|
|
332
|
+
return createMcpTools(() => this.coordinator, () => this.context);
|
|
333
|
+
}
|
|
334
|
+
registerCLICommands() {
|
|
335
|
+
return createCliCommands(() => this.coordinator, () => this.context);
|
|
336
|
+
}
|
|
337
|
+
registerAgentTypes() {
|
|
338
|
+
return [
|
|
339
|
+
{
|
|
340
|
+
type: 'federation-coordinator',
|
|
341
|
+
name: 'Federation Coordinator',
|
|
342
|
+
description: 'Coordinates cross-installation agent federation, managing discovery, handshake, trust evaluation, and secure message routing between federated nodes.',
|
|
343
|
+
defaultConfig: {
|
|
344
|
+
id: '',
|
|
345
|
+
name: 'federation-coordinator',
|
|
346
|
+
type: 'coordinator',
|
|
347
|
+
capabilities: [
|
|
348
|
+
'federation:discover',
|
|
349
|
+
'federation:connect',
|
|
350
|
+
'federation:read',
|
|
351
|
+
'federation:write',
|
|
352
|
+
'federation:admin',
|
|
353
|
+
],
|
|
354
|
+
maxConcurrentTasks: 10,
|
|
355
|
+
priority: 90,
|
|
356
|
+
timeout: 300_000,
|
|
357
|
+
metadata: {
|
|
358
|
+
pluginSource: '@claude-flow/plugin-agent-federation',
|
|
359
|
+
},
|
|
360
|
+
},
|
|
361
|
+
requiredCapabilities: ['federation:discover', 'federation:connect'],
|
|
362
|
+
metadata: {
|
|
363
|
+
trustAware: true,
|
|
364
|
+
piiAware: true,
|
|
365
|
+
},
|
|
366
|
+
},
|
|
367
|
+
];
|
|
368
|
+
}
|
|
369
|
+
async healthCheck() {
|
|
370
|
+
if (!this.coordinator)
|
|
371
|
+
return false;
|
|
372
|
+
const status = this.coordinator.getStatus();
|
|
373
|
+
return status.healthy;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAW,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,0DAA0D;AAC1D,EAAE,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,CAAe,EAAc,EAAE;IACrD,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,CAAC;QAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;AACpB,CAAC,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAoC,MAAM,yCAAyC,CAAC;AAClH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAuB,MAAM,oCAAoC,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,YAAY,EAA4B,MAAM,gCAAgC,CAAC;AACxF,OAAO,EAAc,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAYlF,OAAO,EACL,iBAAiB,GAElB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,OAAO,qBAAqB;IACvB,IAAI,GAAG,sCAAsC,CAAC;IAC9C,OAAO,GAAG,eAAe,CAAC;IAC1B,WAAW,GAAG,wEAAwE,CAAC;IACvF,MAAM,GAAG,kBAAkB,CAAC;IAC5B,YAAY,GAAG,CAAC,uBAAuB,EAAE,wBAAwB,CAAC,CAAC;IAEpE,WAAW,GAAiC,IAAI,CAAC;IACjD,OAAO,GAAyB,IAAI,CAAC;IAC7C,qEAAqE;IACrE,kEAAkE;IAClE,iEAAiE;IACjE,wBAAwB;IAChB,SAAS,GAA2B,IAAI,CAAC;IAEjD,KAAK,CAAC,UAAU,CAAC,OAAsB;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE9B,MAAM,MAAM,GAAI,MAAM,CAAC,QAAQ,CAAY,IAAI,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACjF,MAAM,QAAQ,GAAI,MAAM,CAAC,UAAU,CAAY,IAAI,qBAAqB,CAAC;QACzE,MAAM,cAAc,GAAI,MAAM,CAAC,gBAAgB,CAAoB,IAAI,MAAM,CAAC;QAC9E,MAAM,WAAW,GAAI,MAAM,CAAC,aAAa,CAAc,IAAI,EAAE,CAAC;QAC9D,MAAM,QAAQ,GAAI,MAAM,CAAC,UAAU,CAAY,IAAI,QAAQ,MAAM,EAAE,CAAC;QAEpE,qEAAqE;QACrE,sEAAsE;QACtE,sDAAsD;QACtD,oEAAoE;QACpE,oEAAoE;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,MAAM,OAAO,CAAC,CAAC;QACnD,IAAI,UAAsB,CAAC;QAC3B,IAAI,YAAoB,CAAC;QACzB,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAA8D,CAAC;gBACvH,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnE,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBACzC,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBACvC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;oBAAE,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC7E,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;oBACpC,MAAM;oBACN,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACnD,SAAS,EAAE,YAAY;oBACvB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,uEAAuE;YACvE,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YACvC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,yCAAyC,CAAC,CAAC;QACnJ,CAAC;QAED,MAAM,WAAW,GAAgC;YAC/C,MAAM;YACN,SAAS,EAAE,YAAY;YACvB,QAAQ;YACR,YAAY,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC;SACnF,CAAC;QAEF,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAEhG,oEAAoE;QACpE,oEAAoE;QACpE,iEAAiE;QACjE,uCAAuC;QACvC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAU,EAAE;YACxC,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;YAC/D,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,YAAoB,EAAE,gBAAwB,EAAW,EAAE;YAC3F,IAAI,CAAC;gBACH,IAAI,CAAC,YAAY,IAAI,CAAC,gBAAgB;oBAAE,OAAO,KAAK,CAAC;gBACrD,OAAO,EAAE,CAAC,MAAM,CACd,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,EAChC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAC7B,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CACrC,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,KAAK,CAAC;YAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,oEAAoE;QACpE,kEAAkE;QAClE,MAAM,YAAY,GAAG,CAAC,GAA4B,EAAU,EAAE;YAC5D,MAAM,QAAQ,GAA4B,EAAE,CAAC;YAC7C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACxC,IAAI,CAAC,KAAK,WAAW;oBAAE,SAAS;gBAChC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjB,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC7D,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAA4B,CAAC,CAAC;oBACxD,CAAC,CAAC,CAAC,CAAC;YACR,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,IAAI,gBAAgB,CACpC;YACE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,QAA8C,CAAC,CAAC;YACzG,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACjC,MAAM,OAAO,GAAI,QAAmC,CAAC,SAAS,CAAC;gBAC/D,MAAM,GAAG,GAAI,QAAmC,CAAC,SAAS,CAAC;gBAC3D,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG;oBAAE,OAAO,KAAK,CAAC;gBACnC,OAAO,WAAW,CAAC,YAAY,CAAC,QAA8C,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACjG,CAAC;YACD,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7E,CAAC;SACF,EACD,EAAE,WAAW,EAAE,CAChB,CAAC;QAEF,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC;YACrC,iBAAiB,EAAE,UAAU;YAC7B,oBAAoB,EAAE,GAAG,EAAE,CAAC,SAAS,UAAU,EAAE,EAAE;YACnD,aAAa,EAAE,GAAG,EAAE,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACnE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;YAChD,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,CACzD,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC;YAC9C,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM;YAC5B,iBAAiB,EAAE,GAAG,EAAE,CAAC,YAAY;YACrC,oBAAoB,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY;SACrD,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,IAAI,kBAAkB,CACxC,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAClE,EAAE,QAAQ,EAAE,CACb,CAAC;QAEF,MAAM,WAAW,GAAmC,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,YAAY,CAC5B;YACE,eAAe,EAAE,UAAU;YAC3B,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM;YAC5B,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,KAA2C,CAAC,CAAC,CAAC,CAAC;YACjG,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC3B,OAAO,WAAW;qBACf,MAAM,CAAC,CAAC,CAAC,EAAE;oBACV,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,SAAS;wBAAE,OAAO,KAAK,CAAC;oBACxE,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC,QAAQ;wBAAE,OAAO,KAAK,CAAC;oBACrE,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC,QAAQ;wBAAE,OAAO,KAAK,CAAC;oBACrE,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC;qBACD,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,CAAQ,CAAC;YACjF,CAAC;YACD,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;gBACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YACnD,CAAC;SACF,EACD,EAAE,cAAc,EAAE,CACnB,CAAC;QAEF,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC;YACxC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBAC7B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,GAAG,KAAK,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACtI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;YAC/E,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAC3B,CAAC;QAEF,MAAM,QAAQ,GAAqF,IAAI,GAAG,EAAE,CAAC;QAE7G,sEAAsE;QACtE,qEAAqE;QACrE,kEAAkE;QAClE,sDAAsD;QACtD,IAAI,SAAS,GAA2B,IAAI,CAAC;QAC7C,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,iBAAiB,CAAC;gBAClC,UAAU,EAAE,MAAM;gBAClB,gBAAgB,EAAE,MAAM;gBACxB,oBAAoB,EAAE,GAAG;gBACzB,UAAU,EAAE,IAAI;aACjB,CAAoB,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,qCAAqC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK;gBAChF,oEAAoE,CACvE,CAAC;QACJ,CAAC;QAED;;;;;;;;;;WAUG;QACH,MAAM,cAAc,GAAG,CAAC,YAAoB,EAAiB,EAAE;YAC7D,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC7C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvB,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC;YACjC,kBAAkB,EAAE,UAAU;YAC9B,aAAa,EAAE,GAAG,EAAE,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACnE,YAAY,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;YAC/E,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;YAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,UAAwB,CAAC,CAAC;gBACrE,OAAO;oBACL,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,UAAU,EAAE;wBACV,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;wBACtC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BACtC,IAAI,EAAE,CAAC,CAAC,IAAI;4BACZ,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,MAAM;4BAC5E,UAAU,EAAE,CAAC,CAAC,UAAU;yBACzB,CAAC,CAAC;wBACH,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;wBACxD,cAAc,EAAE,CAAC;qBAClB;iBACF,CAAC;YACJ,CAAC;YACD,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE;gBAC3C,2DAA2D;gBAC3D,0DAA0D;gBAC1D,2DAA2D;gBAC3D,8DAA8D;gBAC9D,iCAAiC;gBACjC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sCAAsC,QAAQ,CAAC,UAAU,MAAM,YAAY,EAAE,CAC9E,CAAC;oBACF,OAAO;gBACT,CAAC;gBACD,MAAM,OAAO,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;gBAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,iCAAiC,YAAY,4BAA4B,CAC1E,CAAC;oBACF,MAAM,IAAI,KAAK,CAAC,iBAAiB,YAAY,EAAE,CAAC,CAAC;gBACnD,CAAC;gBACD,MAAM,OAAO,GAAiB;oBAC5B,EAAE,EAAE,QAAQ,CAAC,UAAU;oBACvB,IAAI,EAAE,QAAQ,CAAC,WAAW;oBAC1B,OAAO,EAAE,QAAmB;oBAC5B,QAAQ,EAAE;wBACR,YAAY,EAAE,QAAQ,CAAC,YAAY;wBACnC,YAAY,EAAE,QAAQ,CAAC,YAAY;wBACnC,SAAS,EAAE,QAAQ,CAAC,SAAS;qBAC9B;iBACF,CAAC;gBACF,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qBAAqB,OAAO,cAAc,QAAQ,CAAC,UAAU,UAAU,QAAQ,CAAC,WAAW,GAAG,CAC/F,CAAC;YACJ,CAAC;YACD,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YAC5E,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM;SAC7B,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,IAAI,qBAAqB,CAC1C,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EACjD,WAAW,EAAE,cAAc,EAAE,YAAY,CAC1C,CAAC;QAEF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACtE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;QAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;QAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;QAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;QAC/D,CAAC;QAED,oEAAoE;QACpE,mEAAmE;QACnE,iEAAiE;QACjE,mEAAmE;QACnE,uBAAuB;QACvB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAuB,CAAC;QACxD,IAAI,SAAS,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACpE,MAAM,UAAU,GAAI,MAAM,CAAC,MAAM,CAAwB,IAAI,SAAS,CAAC;YACvE,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,UAAU,IAAI,UAAU,EAAE,CAAC,CAAC;YAC7E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sCAAsC,UAAU,IAAI,UAAU,IAAI;oBAChE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CACrD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,kEAAkE;QAClE,+DAA+D;QAC/D,qDAAqD;QACrD,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YAC3D,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,OAAe,EAAE,OAAqB,EAAE,EAAE;gBACnE,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE;oBACtC,SAAS;oBACT,KAAK;oBACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,+FAA+F;gBAC7F,0CAA0C,CAC7C,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC/B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CACvB,qCAAqC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAChF,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,gBAAgB;QACd,OAAO,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC;IAED,mBAAmB;QACjB,OAAO,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvE,CAAC;IAED,kBAAkB;QAChB,OAAO;YACL;gBACE,IAAI,EAAE,wBAAwB;gBAC9B,IAAI,EAAE,wBAAwB;gBAC9B,WAAW,EAAE,uJAAuJ;gBACpK,aAAa,EAAE;oBACb,EAAE,EAAE,EAAE;oBACN,IAAI,EAAE,wBAAwB;oBAC9B,IAAI,EAAE,aAAa;oBACnB,YAAY,EAAE;wBACZ,qBAAqB;wBACrB,oBAAoB;wBACpB,iBAAiB;wBACjB,kBAAkB;wBAClB,kBAAkB;qBACnB;oBACD,kBAAkB,EAAE,EAAE;oBACtB,QAAQ,EAAE,EAAE;oBACZ,OAAO,EAAE,OAAO;oBAChB,QAAQ,EAAE;wBACR,YAAY,EAAE,sCAAsC;qBACrD;iBACF;gBACD,oBAAoB,EAAE,CAAC,qBAAqB,EAAE,oBAAoB,CAAC;gBACnE,QAAQ,EAAE;oBACR,UAAU,EAAE,IAAI;oBAChB,QAAQ,EAAE,IAAI;iBACf;aACF;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;CACF"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@claude-flow/plugin-agent-federation",
|
|
3
|
+
"version": "1.0.0-alpha.10",
|
|
4
|
+
"description": "Cross-installation agent federation with zero-trust security, PII-gated data flow, and compliance-grade audit trails.",
|
|
5
|
+
"homepage": "https://github.com/ruvnet/ruflo",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"bin": {
|
|
10
|
+
"ruflo-federation": "dist/bin.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist/**",
|
|
14
|
+
"README.md",
|
|
15
|
+
"LICENSE"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"test": "vitest run",
|
|
20
|
+
"test:watch": "vitest",
|
|
21
|
+
"clean": "rm -rf dist"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@noble/ed25519": "^2.0.0",
|
|
25
|
+
"agentic-flow": "2.0.12-fix.3"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@claude-flow/shared": "workspace:*",
|
|
29
|
+
"@claude-flow/security": "workspace:*",
|
|
30
|
+
"typescript": "^5.4.0",
|
|
31
|
+
"vitest": "^4.0.16"
|
|
32
|
+
},
|
|
33
|
+
"keywords": [
|
|
34
|
+
"federation",
|
|
35
|
+
"multi-agent",
|
|
36
|
+
"trust",
|
|
37
|
+
"pii",
|
|
38
|
+
"security",
|
|
39
|
+
"audit",
|
|
40
|
+
"compliance"
|
|
41
|
+
],
|
|
42
|
+
"author": "Claude Flow Team",
|
|
43
|
+
"license": "MIT"
|
|
44
|
+
}
|