@claude-flow/plugin-agent-federation 1.0.0-alpha.2

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.
Files changed (70) hide show
  1. package/README.md +45 -0
  2. package/dist/application/federation-coordinator.d.ts +51 -0
  3. package/dist/application/federation-coordinator.d.ts.map +1 -0
  4. package/dist/application/federation-coordinator.js +201 -0
  5. package/dist/application/federation-coordinator.js.map +1 -0
  6. package/dist/application/policy-engine.d.ts +41 -0
  7. package/dist/application/policy-engine.d.ts.map +1 -0
  8. package/dist/application/policy-engine.js +175 -0
  9. package/dist/application/policy-engine.js.map +1 -0
  10. package/dist/application/trust-evaluator.d.ts +42 -0
  11. package/dist/application/trust-evaluator.d.ts.map +1 -0
  12. package/dist/application/trust-evaluator.js +132 -0
  13. package/dist/application/trust-evaluator.js.map +1 -0
  14. package/dist/bin.d.ts +13 -0
  15. package/dist/bin.d.ts.map +1 -0
  16. package/dist/bin.js +189 -0
  17. package/dist/bin.js.map +1 -0
  18. package/dist/cli-commands.d.ts +7 -0
  19. package/dist/cli-commands.d.ts.map +1 -0
  20. package/dist/cli-commands.js +198 -0
  21. package/dist/cli-commands.js.map +1 -0
  22. package/dist/domain/entities/federation-envelope.d.ts +45 -0
  23. package/dist/domain/entities/federation-envelope.d.ts.map +1 -0
  24. package/dist/domain/entities/federation-envelope.js +68 -0
  25. package/dist/domain/entities/federation-envelope.js.map +1 -0
  26. package/dist/domain/entities/federation-node.d.ts +49 -0
  27. package/dist/domain/entities/federation-node.d.ts.map +1 -0
  28. package/dist/domain/entities/federation-node.js +66 -0
  29. package/dist/domain/entities/federation-node.js.map +1 -0
  30. package/dist/domain/entities/federation-session.d.ts +55 -0
  31. package/dist/domain/entities/federation-session.d.ts.map +1 -0
  32. package/dist/domain/entities/federation-session.js +105 -0
  33. package/dist/domain/entities/federation-session.js.map +1 -0
  34. package/dist/domain/entities/trust-level.d.ts +17 -0
  35. package/dist/domain/entities/trust-level.d.ts.map +1 -0
  36. package/dist/domain/entities/trust-level.js +35 -0
  37. package/dist/domain/entities/trust-level.js.map +1 -0
  38. package/dist/domain/services/audit-service.d.ts +69 -0
  39. package/dist/domain/services/audit-service.d.ts.map +1 -0
  40. package/dist/domain/services/audit-service.js +149 -0
  41. package/dist/domain/services/audit-service.js.map +1 -0
  42. package/dist/domain/services/discovery-service.d.ts +51 -0
  43. package/dist/domain/services/discovery-service.d.ts.map +1 -0
  44. package/dist/domain/services/discovery-service.js +140 -0
  45. package/dist/domain/services/discovery-service.js.map +1 -0
  46. package/dist/domain/services/handshake-service.d.ts +48 -0
  47. package/dist/domain/services/handshake-service.d.ts.map +1 -0
  48. package/dist/domain/services/handshake-service.js +94 -0
  49. package/dist/domain/services/handshake-service.js.map +1 -0
  50. package/dist/domain/services/pii-pipeline-service.d.ts +65 -0
  51. package/dist/domain/services/pii-pipeline-service.d.ts.map +1 -0
  52. package/dist/domain/services/pii-pipeline-service.js +208 -0
  53. package/dist/domain/services/pii-pipeline-service.js.map +1 -0
  54. package/dist/domain/services/routing-service.d.ts +51 -0
  55. package/dist/domain/services/routing-service.d.ts.map +1 -0
  56. package/dist/domain/services/routing-service.js +147 -0
  57. package/dist/domain/services/routing-service.js.map +1 -0
  58. package/dist/index.d.ts +14 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +14 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/mcp-tools.d.ts +8 -0
  63. package/dist/mcp-tools.d.ts.map +1 -0
  64. package/dist/mcp-tools.js +217 -0
  65. package/dist/mcp-tools.js.map +1 -0
  66. package/dist/plugin.d.ts +17 -0
  67. package/dist/plugin.d.ts.map +1 -0
  68. package/dist/plugin.js +174 -0
  69. package/dist/plugin.js.map +1 -0
  70. package/package.json +33 -0
@@ -0,0 +1,132 @@
1
+ import { TrustLevel, TRUST_TRANSITION_THRESHOLDS } from '../domain/entities/trust-level.js';
2
+ const THREAT_WINDOW_CONFIG = {
3
+ detections: [],
4
+ windowMs: 3_600_000,
5
+ threshold: 2,
6
+ };
7
+ export class TrustEvaluator {
8
+ deps;
9
+ threatWindows;
10
+ constructor(deps = {}) {
11
+ this.deps = deps;
12
+ this.threatWindows = new Map();
13
+ }
14
+ computeScore(metrics, uptimeRatio) {
15
+ const totalAttempted = metrics.messagesSent + metrics.messagesReceived;
16
+ const successRate = totalAttempted > 0
17
+ ? (totalAttempted - metrics.hmacFailures) / totalAttempted
18
+ : 0;
19
+ const uptime = Math.max(0, Math.min(1, uptimeRatio));
20
+ const threatPenalty = this.computeThreatPenalty(metrics.threatDetections, totalAttempted);
21
+ const dataIntegrityScore = totalAttempted > 0
22
+ ? 1 - (metrics.hmacFailures / totalAttempted)
23
+ : 1;
24
+ const score = 0.4 * successRate +
25
+ 0.2 * uptime +
26
+ 0.2 * (1 - threatPenalty) +
27
+ 0.2 * dataIntegrityScore;
28
+ const components = {
29
+ successRate,
30
+ uptime,
31
+ threatPenalty,
32
+ dataIntegrityScore,
33
+ };
34
+ return { score: Math.max(0, Math.min(1, score)), components };
35
+ }
36
+ evaluateTransition(node, metrics, uptimeRatio, hasInstitutionalAttestation = false) {
37
+ const { score, components } = this.computeScore(metrics, uptimeRatio);
38
+ const currentLevel = node.trustLevel;
39
+ node.updateTrustScore(score);
40
+ const upgrade = this.checkUpgrade(currentLevel, score, metrics.totalInteractions, hasInstitutionalAttestation);
41
+ if (upgrade !== null) {
42
+ const result = {
43
+ previousLevel: currentLevel,
44
+ newLevel: upgrade,
45
+ score,
46
+ components,
47
+ reason: `Score ${score.toFixed(3)} meets upgrade threshold for level ${upgrade}`,
48
+ requiresHumanApproval: upgrade === TrustLevel.PRIVILEGED,
49
+ };
50
+ if (!result.requiresHumanApproval) {
51
+ node.updateTrustLevel(upgrade);
52
+ }
53
+ this.deps.onTrustChange?.(node.nodeId, result);
54
+ return result;
55
+ }
56
+ const downgrade = this.checkDowngrade(currentLevel, score);
57
+ if (downgrade !== null) {
58
+ const result = {
59
+ previousLevel: currentLevel,
60
+ newLevel: downgrade,
61
+ score,
62
+ components,
63
+ reason: `Score ${score.toFixed(3)} dropped below downgrade threshold for level ${currentLevel}`,
64
+ requiresHumanApproval: false,
65
+ };
66
+ node.updateTrustLevel(downgrade);
67
+ this.deps.onTrustChange?.(node.nodeId, result);
68
+ return result;
69
+ }
70
+ return null;
71
+ }
72
+ downgrade(node, reason) {
73
+ const previousLevel = node.trustLevel;
74
+ node.updateTrustLevel(TrustLevel.UNTRUSTED);
75
+ node.updateTrustScore(0);
76
+ const result = {
77
+ previousLevel,
78
+ newLevel: TrustLevel.UNTRUSTED,
79
+ score: 0,
80
+ components: { successRate: 0, uptime: 0, threatPenalty: 1, dataIntegrityScore: 0 },
81
+ reason: `Immediate downgrade: ${reason}`,
82
+ requiresHumanApproval: false,
83
+ };
84
+ this.deps.onTrustChange?.(node.nodeId, result);
85
+ return result;
86
+ }
87
+ recordThreatDetection(nodeId) {
88
+ const now = new Date();
89
+ const detections = this.threatWindows.get(nodeId) ?? [];
90
+ detections.push(now);
91
+ const windowStart = now.getTime() - THREAT_WINDOW_CONFIG.windowMs;
92
+ const recentDetections = detections.filter(d => d.getTime() > windowStart);
93
+ this.threatWindows.set(nodeId, recentDetections);
94
+ return recentDetections.length >= THREAT_WINDOW_CONFIG.threshold;
95
+ }
96
+ checkUpgrade(currentLevel, score, totalInteractions, hasInstitutionalAttestation) {
97
+ if (currentLevel >= TrustLevel.PRIVILEGED)
98
+ return null;
99
+ const nextLevel = currentLevel + 1;
100
+ const transitionKey = `${currentLevel}->${nextLevel}`;
101
+ const threshold = TRUST_TRANSITION_THRESHOLDS[transitionKey];
102
+ if (!threshold)
103
+ return null;
104
+ if (score < threshold.upgradeScore)
105
+ return null;
106
+ if (totalInteractions < threshold.minInteractions)
107
+ return null;
108
+ if (nextLevel === TrustLevel.PRIVILEGED && !hasInstitutionalAttestation) {
109
+ return null;
110
+ }
111
+ return nextLevel;
112
+ }
113
+ checkDowngrade(currentLevel, score) {
114
+ if (currentLevel <= TrustLevel.UNTRUSTED)
115
+ return null;
116
+ const transitionKey = `${currentLevel - 1}->${currentLevel}`;
117
+ const threshold = TRUST_TRANSITION_THRESHOLDS[transitionKey];
118
+ if (!threshold)
119
+ return null;
120
+ if (score < threshold.downgradeScore) {
121
+ return (currentLevel - 1);
122
+ }
123
+ return null;
124
+ }
125
+ computeThreatPenalty(threatCount, totalMessages) {
126
+ if (totalMessages === 0)
127
+ return 0;
128
+ const ratio = threatCount / totalMessages;
129
+ return Math.min(1, ratio * 10);
130
+ }
131
+ }
132
+ //# sourceMappingURL=trust-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-evaluator.js","sourceRoot":"","sources":["../../src/application/trust-evaluator.ts"],"names":[],"mappings":"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"}
package/dist/bin.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Standalone CLI shim for @claude-flow/plugin-agent-federation.
4
+ * Maps `ruflo-federation <subcommand> [args]` -> CLICommandDefinition handlers.
5
+ *
6
+ * Auth/config via .env (loaded from CWD or any parent):
7
+ * FEDERATION_NODE_NAME - this node's identity (default: hostname)
8
+ * FEDERATION_BIND_HOST - bind address (default: 0.0.0.0)
9
+ * FEDERATION_BIND_PORT - bind port (default: 8443)
10
+ * FEDERATION_TRUST_LEVEL - default trust tier (default: untrusted)
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG"}
package/dist/bin.js ADDED
@@ -0,0 +1,189 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Standalone CLI shim for @claude-flow/plugin-agent-federation.
4
+ * Maps `ruflo-federation <subcommand> [args]` -> CLICommandDefinition handlers.
5
+ *
6
+ * Auth/config via .env (loaded from CWD or any parent):
7
+ * FEDERATION_NODE_NAME - this node's identity (default: hostname)
8
+ * FEDERATION_BIND_HOST - bind address (default: 0.0.0.0)
9
+ * FEDERATION_BIND_PORT - bind port (default: 8443)
10
+ * FEDERATION_TRUST_LEVEL - default trust tier (default: untrusted)
11
+ */
12
+ import { readFileSync, existsSync } from 'node:fs';
13
+ import { resolve } from 'node:path';
14
+ import { hostname } from 'node:os';
15
+ import { AgentFederationPlugin } from './plugin.js';
16
+ function loadDotenv() {
17
+ let dir = process.cwd();
18
+ for (let i = 0; i < 8; i++) {
19
+ const candidate = resolve(dir, '.env');
20
+ if (existsSync(candidate)) {
21
+ const text = readFileSync(candidate, 'utf8');
22
+ let count = 0;
23
+ for (const rawLine of text.split('\n')) {
24
+ const line = rawLine.trim();
25
+ if (!line || line.startsWith('#'))
26
+ continue;
27
+ const eq = line.indexOf('=');
28
+ if (eq < 1)
29
+ continue;
30
+ const key = line.slice(0, eq).trim();
31
+ let val = line.slice(eq + 1).trim();
32
+ if ((val.startsWith('"') && val.endsWith('"')) || (val.startsWith("'") && val.endsWith("'"))) {
33
+ val = val.slice(1, -1);
34
+ }
35
+ if (process.env[key] === undefined) {
36
+ process.env[key] = val;
37
+ count++;
38
+ }
39
+ }
40
+ return { loaded: candidate, count };
41
+ }
42
+ const parent = resolve(dir, '..');
43
+ if (parent === dir)
44
+ break;
45
+ dir = parent;
46
+ }
47
+ return { loaded: null, count: 0 };
48
+ }
49
+ loadDotenv();
50
+ function parseArgs(argv) {
51
+ const out = { _: [] };
52
+ for (let i = 0; i < argv.length; i++) {
53
+ const a = argv[i];
54
+ if (a.startsWith('--')) {
55
+ const eq = a.indexOf('=');
56
+ if (eq > -1) {
57
+ out[a.slice(2, eq)] = a.slice(eq + 1);
58
+ }
59
+ else {
60
+ const key = a.slice(2);
61
+ const next = argv[i + 1];
62
+ if (next === undefined || next.startsWith('-')) {
63
+ out[key] = true;
64
+ }
65
+ else {
66
+ out[key] = next;
67
+ i++;
68
+ }
69
+ }
70
+ }
71
+ else if (a.startsWith('-') && a.length > 1) {
72
+ const key = a.slice(1);
73
+ const next = argv[i + 1];
74
+ if (next === undefined || next.startsWith('-')) {
75
+ out[key] = true;
76
+ }
77
+ else {
78
+ out[key] = next;
79
+ i++;
80
+ }
81
+ }
82
+ else {
83
+ out._.push(a);
84
+ }
85
+ }
86
+ return out;
87
+ }
88
+ function aliasShortToLong(args) {
89
+ const aliases = {
90
+ n: 'name',
91
+ h: 'host',
92
+ p: 'port',
93
+ t: 'token',
94
+ u: 'url',
95
+ f: 'format',
96
+ };
97
+ for (const [s, l] of Object.entries(aliases)) {
98
+ if (s in args && !(l in args)) {
99
+ args[l] = args[s];
100
+ }
101
+ }
102
+ return args;
103
+ }
104
+ /**
105
+ * Resolve federation subcommand. Supports multi-word like
106
+ * `federation peers add`, `federation peers remove`.
107
+ */
108
+ function resolveCommand(argv, commandNames) {
109
+ const tokens = argv.slice();
110
+ for (const len of [3, 2, 1]) {
111
+ if (tokens.length < len)
112
+ continue;
113
+ const probe = 'federation ' + tokens.slice(0, len).join(' ');
114
+ if (commandNames.includes(probe)) {
115
+ return { name: probe, rest: tokens.slice(len) };
116
+ }
117
+ }
118
+ return null;
119
+ }
120
+ function makeContext() {
121
+ const noop = () => undefined;
122
+ return {
123
+ config: {
124
+ nodeName: process.env.FEDERATION_NODE_NAME ?? hostname(),
125
+ bindHost: process.env.FEDERATION_BIND_HOST ?? '0.0.0.0',
126
+ bindPort: Number(process.env.FEDERATION_BIND_PORT ?? 8443),
127
+ defaultTrustLevel: process.env.FEDERATION_TRUST_LEVEL ?? 'untrusted',
128
+ },
129
+ eventBus: { emit: noop, on: noop, off: noop, once: noop },
130
+ logger: {
131
+ info: () => { },
132
+ warn: (...a) => console.warn('[warn]', ...a),
133
+ error: (...a) => console.error('[error]', ...a),
134
+ debug: (...a) => process.env.DEBUG && console.error('[debug]', ...a),
135
+ },
136
+ services: { get: () => undefined, register: noop, has: () => false },
137
+ };
138
+ }
139
+ function printHelp(commandNames) {
140
+ console.log('ruflo-federation — Cross-installation agent federation CLI');
141
+ console.log('');
142
+ console.log('Usage: ruflo-federation <subcommand> [options]');
143
+ console.log('');
144
+ console.log('Config (via .env or env vars):');
145
+ console.log(' FEDERATION_NODE_NAME, FEDERATION_BIND_HOST, FEDERATION_BIND_PORT, FEDERATION_TRUST_LEVEL');
146
+ console.log('');
147
+ console.log('Subcommands:');
148
+ for (const n of commandNames) {
149
+ console.log(' ' + n.replace(/^federation /, ''));
150
+ }
151
+ console.log('');
152
+ console.log('Run "ruflo-federation <subcommand> --help" for command-specific options.');
153
+ }
154
+ async function main() {
155
+ const argv = process.argv.slice(2);
156
+ const plugin = new AgentFederationPlugin();
157
+ const context = makeContext();
158
+ await plugin.initialize(context);
159
+ const commands = plugin.registerCLICommands();
160
+ const commandNames = commands.map((c) => c.name);
161
+ if (argv.length === 0 || argv[0] === '--help' || argv[0] === '-h') {
162
+ printHelp(commandNames);
163
+ return;
164
+ }
165
+ const resolved = resolveCommand(argv, commandNames);
166
+ if (!resolved) {
167
+ console.error('Unknown subcommand: ' + argv.join(' '));
168
+ console.error('Run "ruflo-federation --help" to list available subcommands.');
169
+ process.exitCode = 1;
170
+ return;
171
+ }
172
+ const cmd = commands.find((c) => c.name === resolved.name);
173
+ const args = aliasShortToLong(parseArgs(resolved.rest));
174
+ try {
175
+ await cmd.handler(args);
176
+ }
177
+ catch (err) {
178
+ const msg = err instanceof Error ? err.message : String(err);
179
+ console.error('Error: ' + msg);
180
+ process.exitCode = 1;
181
+ }
182
+ }
183
+ main()
184
+ .then(() => process.exit(process.exitCode ?? 0))
185
+ .catch((err) => {
186
+ console.error('Fatal: ' + (err instanceof Error ? err.message : String(err)));
187
+ process.exit(1);
188
+ });
189
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CLICommandDefinition, PluginContext } from '@claude-flow/shared/src/plugin-interface.js';
2
+ import type { FederationCoordinator } from './application/federation-coordinator.js';
3
+ type CoordinatorGetter = () => FederationCoordinator | null;
4
+ type ContextGetter = () => PluginContext | null;
5
+ export declare function createCliCommands(getCoordinator: CoordinatorGetter, getContext: ContextGetter): CLICommandDefinition[];
6
+ export {};
7
+ //# sourceMappingURL=cli-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-commands.d.ts","sourceRoot":"","sources":["../src/cli-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACvG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAGrF,KAAK,iBAAiB,GAAG,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAC5D,KAAK,aAAa,GAAG,MAAM,aAAa,GAAG,IAAI,CAAC;AAQhD,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,iBAAiB,EACjC,UAAU,EAAE,aAAa,GACxB,oBAAoB,EAAE,CA6LxB"}
@@ -0,0 +1,198 @@
1
+ import { getTrustLevelLabel } from './domain/entities/trust-level.js';
2
+ function requireCoordinator(get) {
3
+ const c = get();
4
+ if (!c)
5
+ throw new Error('Federation not initialized. Run "federation init" first.');
6
+ return c;
7
+ }
8
+ export function createCliCommands(getCoordinator, getContext) {
9
+ return [
10
+ {
11
+ name: 'federation init',
12
+ description: 'Generate keypair, create federation config, and start discovery',
13
+ options: [
14
+ { name: 'endpoint', short: 'e', description: 'WebSocket/HTTP endpoint', type: 'string', required: true },
15
+ { name: 'node-id', short: 'n', description: 'Node identifier', type: 'string' },
16
+ { name: 'compliance', short: 'c', description: 'Compliance mode (hipaa, soc2, gdpr, none)', type: 'string', default: 'none' },
17
+ ],
18
+ handler: async (args) => {
19
+ const coordinator = requireCoordinator(getCoordinator);
20
+ const nodeId = args['node-id'] ?? `node-${Date.now().toString(36)}`;
21
+ await coordinator.initialize({
22
+ nodeId,
23
+ publicKey: '',
24
+ endpoint: args['endpoint'],
25
+ capabilities: {
26
+ agentTypes: ['coder', 'reviewer', 'tester'],
27
+ maxConcurrentSessions: 10,
28
+ supportedProtocols: ['websocket', 'http'],
29
+ complianceModes: [args['compliance']],
30
+ },
31
+ version: '1.0.0-alpha.1',
32
+ timestamp: new Date().toISOString(),
33
+ });
34
+ console.log(`Federation initialized: ${nodeId} at ${args['endpoint']}`);
35
+ },
36
+ },
37
+ {
38
+ name: 'federation join',
39
+ description: 'Join a federation by connecting to a peer endpoint',
40
+ arguments: [{ name: 'endpoint', description: 'Remote peer endpoint', required: true }],
41
+ handler: async (args) => {
42
+ const coordinator = requireCoordinator(getCoordinator);
43
+ const session = await coordinator.joinPeer(args._[0]);
44
+ console.log(`Joined peer. Session: ${session.sessionId}`);
45
+ console.log(`Trust level: ${getTrustLevelLabel(session.trustLevel)}`);
46
+ console.log(`Capabilities: ${session.negotiatedCapabilities.join(', ')}`);
47
+ },
48
+ },
49
+ {
50
+ name: 'federation leave',
51
+ description: 'Leave the federation gracefully, terminating all sessions',
52
+ handler: async () => {
53
+ const coordinator = requireCoordinator(getCoordinator);
54
+ await coordinator.shutdown();
55
+ console.log('Left federation. All sessions terminated.');
56
+ },
57
+ },
58
+ {
59
+ name: 'federation peers',
60
+ description: 'List known federation peers with trust levels and status',
61
+ options: [
62
+ { name: 'format', short: 'f', description: 'Output format (table, json)', type: 'string', default: 'table' },
63
+ ],
64
+ handler: async (args) => {
65
+ const coordinator = requireCoordinator(getCoordinator);
66
+ const status = coordinator.getStatus();
67
+ const format = args['format'];
68
+ if (format === 'json') {
69
+ console.log(JSON.stringify(status.trustLevels, null, 2));
70
+ }
71
+ else {
72
+ console.log('Node ID | Trust Level');
73
+ console.log('-'.repeat(60));
74
+ for (const [nodeId, level] of Object.entries(status.trustLevels)) {
75
+ console.log(`${nodeId.padEnd(33)}| ${getTrustLevelLabel(level)}`);
76
+ }
77
+ }
78
+ },
79
+ },
80
+ {
81
+ name: 'federation peers add',
82
+ description: 'Add a static peer to the federation',
83
+ arguments: [{ name: 'endpoint', description: 'Peer endpoint to add', required: true }],
84
+ handler: async (args) => {
85
+ const coordinator = requireCoordinator(getCoordinator);
86
+ const session = await coordinator.joinPeer(args._[0]);
87
+ console.log(`Peer added and connected. Session: ${session.sessionId}`);
88
+ },
89
+ },
90
+ {
91
+ name: 'federation peers remove',
92
+ description: 'Remove a peer from the federation',
93
+ arguments: [{ name: 'node-id', description: 'Node ID to remove', required: true }],
94
+ handler: async (args) => {
95
+ const coordinator = requireCoordinator(getCoordinator);
96
+ await coordinator.leavePeer(args._[0]);
97
+ console.log(`Peer ${args._[0]} removed.`);
98
+ },
99
+ },
100
+ {
101
+ name: 'federation status',
102
+ description: 'Show federation health, active sessions, and metrics',
103
+ options: [
104
+ { name: 'format', short: 'f', description: 'Output format (table, json)', type: 'string', default: 'table' },
105
+ ],
106
+ handler: async (args) => {
107
+ const coordinator = requireCoordinator(getCoordinator);
108
+ const status = coordinator.getStatus();
109
+ const format = args['format'];
110
+ if (format === 'json') {
111
+ console.log(JSON.stringify(status, null, 2));
112
+ }
113
+ else {
114
+ console.log(`Node ID: ${status.nodeId}`);
115
+ console.log(`Active Sessions: ${status.activeSessions}`);
116
+ console.log(`Known Peers: ${status.knownPeers}`);
117
+ console.log(`Healthy: ${status.healthy}`);
118
+ }
119
+ },
120
+ },
121
+ {
122
+ name: 'federation audit',
123
+ description: 'Query and export federation audit logs',
124
+ options: [
125
+ { name: 'compliance', description: 'Compliance mode filter (hipaa, soc2, gdpr)', type: 'string' },
126
+ { name: 'since', description: 'ISO 8601 start date', type: 'string' },
127
+ { name: 'export', short: 'e', description: 'Export format (json, csv, ndjson)', type: 'string' },
128
+ { name: 'limit', short: 'l', description: 'Maximum results', type: 'number', default: 50 },
129
+ ],
130
+ handler: async (args) => {
131
+ const context = getContext();
132
+ if (!context)
133
+ throw new Error('Plugin not initialized');
134
+ const audit = context.services.get('federation:audit');
135
+ if (!audit)
136
+ throw new Error('Audit service not found');
137
+ const exportFormat = args['export'];
138
+ const query = {
139
+ since: args['since'] ? new Date(args['since']) : undefined,
140
+ limit: args['limit'],
141
+ };
142
+ if (exportFormat) {
143
+ const output = await audit.export(query, exportFormat);
144
+ console.log(output);
145
+ }
146
+ else {
147
+ const events = await audit.query(query);
148
+ console.log(JSON.stringify(events, null, 2));
149
+ }
150
+ },
151
+ },
152
+ {
153
+ name: 'federation trust',
154
+ description: 'View or modify trust level for a specific node',
155
+ arguments: [{ name: 'node-id', description: 'Node ID to inspect or modify', required: true }],
156
+ options: [
157
+ { name: 'set', description: 'Set trust level (0-4)', type: 'number' },
158
+ { name: 'review', description: 'Show detailed trust score breakdown', type: 'boolean', default: false },
159
+ ],
160
+ handler: async (args) => {
161
+ const coordinator = requireCoordinator(getCoordinator);
162
+ const status = coordinator.getStatus();
163
+ const nodeId = args._[0];
164
+ const trustLevel = status.trustLevels[nodeId];
165
+ if (trustLevel === undefined) {
166
+ console.error(`Node ${nodeId} not found in federation.`);
167
+ return;
168
+ }
169
+ console.log(`Node: ${nodeId}`);
170
+ console.log(`Trust Level: ${getTrustLevelLabel(trustLevel)} (${trustLevel})`);
171
+ },
172
+ },
173
+ {
174
+ name: 'federation config',
175
+ description: 'View or update federation configuration',
176
+ options: [
177
+ { name: 'pii-policy', description: 'Path to PII policy JSON file', type: 'string' },
178
+ { name: 'compliance', description: 'Set compliance mode (hipaa, soc2, gdpr, none)', type: 'string' },
179
+ ],
180
+ handler: async (args) => {
181
+ const context = getContext();
182
+ if (!context)
183
+ throw new Error('Plugin not initialized');
184
+ if (args['pii-policy'] || args['compliance']) {
185
+ console.log('Configuration updated.');
186
+ }
187
+ else {
188
+ console.log(JSON.stringify({
189
+ complianceMode: context.config['complianceMode'] ?? 'none',
190
+ endpoint: context.config['endpoint'] ?? 'not configured',
191
+ nodeId: context.config['nodeId'] ?? 'auto-generated',
192
+ }, null, 2));
193
+ }
194
+ },
195
+ },
196
+ ];
197
+ }
198
+ //# sourceMappingURL=cli-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-commands.js","sourceRoot":"","sources":["../src/cli-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export type FederationMessageType = 'task-assignment' | 'memory-query' | 'memory-response' | 'context-share' | 'status-broadcast' | 'trust-change' | 'topology-change' | 'agent-spawn' | 'heartbeat' | 'challenge' | 'challenge-response' | 'handshake-init' | 'handshake-accept' | 'handshake-reject' | 'session-terminate';
2
+ export type PIIScanAction = 'pass' | 'redact' | 'hash' | 'block';
3
+ export interface PIIScanResult {
4
+ readonly scanned: boolean;
5
+ readonly piiFound: boolean;
6
+ readonly detections: readonly PIIScanDetection[];
7
+ readonly actionsApplied: readonly PIIScanAction[];
8
+ readonly scanDurationMs: number;
9
+ }
10
+ export interface PIIScanDetection {
11
+ readonly type: string;
12
+ readonly action: PIIScanAction;
13
+ readonly confidence: number;
14
+ }
15
+ export interface FederationEnvelopeProps<T = unknown> {
16
+ readonly envelopeId: string;
17
+ readonly sourceNodeId: string;
18
+ readonly targetNodeId: string;
19
+ readonly sessionId: string;
20
+ readonly messageType: FederationMessageType;
21
+ readonly payload: T;
22
+ readonly timestamp: Date;
23
+ readonly nonce: string;
24
+ readonly hmacSignature: string;
25
+ readonly piiScanResult: PIIScanResult;
26
+ }
27
+ export declare class FederationEnvelope<T = unknown> {
28
+ readonly envelopeId: string;
29
+ readonly sourceNodeId: string;
30
+ readonly targetNodeId: string;
31
+ readonly sessionId: string;
32
+ readonly messageType: FederationMessageType;
33
+ readonly payload: T;
34
+ readonly timestamp: Date;
35
+ readonly nonce: string;
36
+ readonly hmacSignature: string;
37
+ readonly piiScanResult: PIIScanResult;
38
+ constructor(props: FederationEnvelopeProps<T>);
39
+ isExpired(maxAgeMs: number): boolean;
40
+ toJSON(): Record<string, unknown>;
41
+ toSignablePayload(): string;
42
+ static emptyScanResult(): PIIScanResult;
43
+ }
44
+ export declare const CONSENSUS_REQUIRED_TYPES: ReadonlySet<FederationMessageType>;
45
+ //# sourceMappingURL=federation-envelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"federation-envelope.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/federation-envelope.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAC7B,iBAAiB,GACjB,cAAc,GACd,iBAAiB,GACjB,eAAe,GACf,kBAAkB,GAClB,cAAc,GACd,iBAAiB,GACjB,aAAa,GACb,WAAW,GACX,WAAW,GACX,oBAAoB,GACpB,gBAAgB,GAChB,kBAAkB,GAClB,kBAAkB,GAClB,mBAAmB,CAAC;AAExB,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACjD,QAAQ,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IAClD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,OAAO;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC;AAED,qBAAa,kBAAkB,CAAC,CAAC,GAAG,OAAO;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;gBAE1B,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAa7C,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAejC,iBAAiB,IAAI,MAAM;IAa3B,MAAM,CAAC,eAAe,IAAI,aAAa;CASxC;AAED,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,qBAAqB,CAItE,CAAC"}