ciscollm-cli 1.1.3 → 1.2.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.
Files changed (44) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +137 -17
  3. package/dist/core/agent/AgentLoop.js +2 -1
  4. package/dist/core/agent/AgentLoop.js.map +1 -1
  5. package/dist/core/agent/AutoHealer.d.ts +27 -0
  6. package/dist/core/agent/AutoHealer.js +387 -0
  7. package/dist/core/agent/AutoHealer.js.map +1 -0
  8. package/dist/core/agent/HierarchicalAgentManager.js +5 -5
  9. package/dist/core/agent/MultiAgentCoordinator.d.ts +3 -1
  10. package/dist/core/agent/MultiAgentCoordinator.js +11 -1
  11. package/dist/core/agent/MultiAgentCoordinator.js.map +1 -1
  12. package/dist/core/agent/PromptEngine.js +67 -66
  13. package/dist/core/agent/PromptEngine.js.map +1 -1
  14. package/dist/core/guardrails/AuditLogger.js +4 -4
  15. package/dist/core/guardrails/CommandFirewall.d.ts +2 -0
  16. package/dist/core/guardrails/CommandFirewall.js +99 -8
  17. package/dist/core/guardrails/CommandFirewall.js.map +1 -1
  18. package/dist/core/guardrails/PreExecutionValidator.d.ts +1 -0
  19. package/dist/core/guardrails/PreExecutionValidator.js +37 -0
  20. package/dist/core/guardrails/PreExecutionValidator.js.map +1 -1
  21. package/dist/core/rollback/TransactionManager.js +17 -0
  22. package/dist/core/rollback/TransactionManager.js.map +1 -1
  23. package/dist/index.js +142 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/infrastructure/llm/LLMClient.js +0 -1
  26. package/dist/infrastructure/llm/LLMClient.js.map +1 -1
  27. package/dist/infrastructure/protocols/BaseSession.d.ts +2 -1
  28. package/dist/infrastructure/protocols/BaseSession.js +2 -1
  29. package/dist/infrastructure/protocols/BaseSession.js.map +1 -1
  30. package/dist/infrastructure/protocols/PlinkSerial.d.ts +1 -0
  31. package/dist/infrastructure/protocols/PlinkSerial.js +67 -12
  32. package/dist/infrastructure/protocols/PlinkSerial.js.map +1 -1
  33. package/dist/server/index.js +8 -8
  34. package/dist/server/shell-simulator.d.ts +7 -1
  35. package/dist/server/shell-simulator.js +123 -61
  36. package/dist/server/shell-simulator.js.map +1 -1
  37. package/dist/server/ssh.js +31 -20
  38. package/dist/server/ssh.js.map +1 -1
  39. package/dist/server/telnet.js +11 -0
  40. package/dist/server/telnet.js.map +1 -1
  41. package/package.json +54 -52
  42. package/dist/infrastructure/llm/LocalLLMClient.d.ts +0 -7
  43. package/dist/infrastructure/llm/LocalLLMClient.js +0 -39
  44. package/dist/infrastructure/llm/LocalLLMClient.js.map +0 -1
@@ -0,0 +1,387 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.AutoHealer = void 0;
40
+ const TransactionManager_1 = require("../rollback/TransactionManager");
41
+ const ui_1 = require("../../cli/ui/ui");
42
+ const CommandFirewall_1 = require("../guardrails/CommandFirewall");
43
+ const AuditLogger_1 = require("../guardrails/AuditLogger");
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const chalk_1 = __importDefault(require("chalk"));
47
+ class AutoHealer {
48
+ llmClient;
49
+ coordinator;
50
+ isRunning = false;
51
+ healingDevices = new Set();
52
+ logFilePath;
53
+ minConfidence;
54
+ nonInteractive;
55
+ firewall = new CommandFirewall_1.CommandFirewall();
56
+ triggerHistory = new Map();
57
+ blockedUntil = new Map();
58
+ constructor(llmClient, coordinator, options = {}) {
59
+ this.llmClient = llmClient;
60
+ this.coordinator = coordinator;
61
+ this.logFilePath = path.resolve(process.cwd(), options.logFile || 'healing-audit.log');
62
+ this.minConfidence = options.minConfidence ?? 0.80;
63
+ this.nonInteractive = options.nonInteractive ?? false;
64
+ if (this.nonInteractive) {
65
+ process.env.CISCOLLM_NON_INTERACTIVE = 'true';
66
+ }
67
+ }
68
+ start() {
69
+ if (this.isRunning)
70
+ return;
71
+ this.isRunning = true;
72
+ ui_1.logger.info(`AutoHealer started. Listening for syslog triggers: %LINK-3-UPDOWN, %LINEPROTO-5-UPDOWN, %OSPF-5-ADJCHG...`);
73
+ this.coordinator.on('notification', (msg, deviceId) => {
74
+ this.handleNotification(msg, deviceId).catch(err => {
75
+ ui_1.logger.error(`Error handling notification for device ${deviceId}: ${err.message}`);
76
+ });
77
+ });
78
+ }
79
+ stop() {
80
+ this.isRunning = false;
81
+ ui_1.logger.info(`AutoHealer stopped.`);
82
+ }
83
+ async handleNotification(msg, deviceId) {
84
+ const isTrigger = /%(LINK-3-UPDOWN|LINEPROTO-5-UPDOWN|OSPF-5-ADJCHG):/.test(msg);
85
+ if (!isTrigger)
86
+ return;
87
+ const now = Date.now();
88
+ const blockTime = this.blockedUntil.get(deviceId);
89
+ if (blockTime && now < blockTime) {
90
+ const minutesLeft = Math.ceil((blockTime - now) / 60000);
91
+ ui_1.logger.warn(`[AutoHealer Cooldown] Healing triggers for ${deviceId} are blocked for another ${minutesLeft} minute(s) due to rapid repetitive alerts.`);
92
+ this.logToAudit(`[BLOCKED-COOLDOWN] Device: ${deviceId} | Cooldown active for another ${minutesLeft} mins`);
93
+ return;
94
+ }
95
+ if (this.healingDevices.has(deviceId)) {
96
+ ui_1.logger.info(`[Telemetry Alert] Alert received for ${deviceId} but device is already undergoing healing.`);
97
+ return;
98
+ }
99
+ let history = this.triggerHistory.get(deviceId) || [];
100
+ history = history.filter(ts => now - ts < 600000);
101
+ history.push(now);
102
+ this.triggerHistory.set(deviceId, history);
103
+ if (history.length > 3) {
104
+ this.blockedUntil.set(deviceId, now + 900000);
105
+ ui_1.logger.error(`[AutoHealer Cooldown] CRITICAL: Device ${deviceId} triggered healing ${history.length} times in less than 10 minutes. Activating 15-minute cooldown to prevent remediation loop.`);
106
+ this.logToAudit(`[ACTIVATED-COOLDOWN] Device: ${deviceId} | Blocked for 15 mins due to repetitive triggers.`);
107
+ return;
108
+ }
109
+ this.healingDevices.add(deviceId);
110
+ ui_1.logger.heading(`Closed-Loop Healing Event Triggered on ${deviceId}`);
111
+ ui_1.logger.info(`Syslog Received: ${chalk_1.default.yellow(msg)}`);
112
+ this.logToAudit(`[TRIGGERED] Device: ${deviceId} | Syslog: ${msg}`);
113
+ const spinner = (0, ui_1.createSpinner)('OODA Loop: Initiating recovery sequence...').start();
114
+ try {
115
+ spinner.text = 'OODA Loop (Orient): Gathering diagnostic context...';
116
+ const context = await this.gatherContext(deviceId, msg);
117
+ spinner.info(`Diagnostic context gathered (${context.commandsRun.length} commands).`);
118
+ const decideSpinner = (0, ui_1.createSpinner)('OODA Loop (Decide): Querying AI for Root Cause & Remediation...').start();
119
+ const diagnosis = await this.diagnose(deviceId, msg, context.outputs);
120
+ decideSpinner.succeed('Root Cause Analysis completed.');
121
+ ui_1.logger.diamond(`AI Detected Issue: ${chalk_1.default.white.bold(diagnosis.detected_issue)}`);
122
+ ui_1.logger.diamond(`AI Root Cause: ${chalk_1.default.gray.italic(diagnosis.root_cause)}`);
123
+ ui_1.logger.diamond(`AI Confidence: ${chalk_1.default.cyan(diagnosis.confidence)}`);
124
+ ui_1.logger.diamond(`Remediation: ${chalk_1.default.green(diagnosis.remediation_commands.join(', '))}`);
125
+ ui_1.logger.diamond(`Verification: ${chalk_1.default.blue(diagnosis.verification_commands.join(', '))}`);
126
+ if (diagnosis.confidence < this.minConfidence) {
127
+ ui_1.logger.warn(`AI confidence (${diagnosis.confidence}) is below threshold (${this.minConfidence}). Skipping automatic healing.`);
128
+ this.logToAudit(`[SKIPPED] Device: ${deviceId} | Confidence too low: ${diagnosis.confidence}`);
129
+ this.healingDevices.delete(deviceId);
130
+ return;
131
+ }
132
+ if (!this.nonInteractive) {
133
+ ui_1.logger.warn('Interactive Mode: Human verification required to apply remediation.');
134
+ const rl = require('readline').createInterface({
135
+ input: process.stdin,
136
+ output: process.stdout
137
+ });
138
+ const approved = await new Promise((resolve) => {
139
+ rl.question(chalk_1.default.yellow(`Apply remediation? (y/N): `), (answer) => {
140
+ rl.close();
141
+ resolve(answer.trim().toLowerCase() === 'y');
142
+ });
143
+ });
144
+ if (!approved) {
145
+ ui_1.logger.error('Remediation denied by human administrator.');
146
+ this.logToAudit(`[DENIED] Device: ${deviceId} | Blocked by administrator.`);
147
+ this.healingDevices.delete(deviceId);
148
+ return;
149
+ }
150
+ }
151
+ const actSpinner = (0, ui_1.createSpinner)('OODA Loop (Act): Applying remediation commands...').start();
152
+ const session = this.coordinator.getSession(deviceId);
153
+ if (!session) {
154
+ throw new Error(`Device connection lost for ${deviceId}`);
155
+ }
156
+ const tx = new TransactionManager_1.TransactionManager();
157
+ await tx.initializeBackup(session);
158
+ let remediationSuccess = true;
159
+ let appliedCommands = [];
160
+ for (const cmd of diagnosis.remediation_commands) {
161
+ try {
162
+ const firewallResult = this.firewall.checkCommand(cmd, null);
163
+ if (firewallResult.dangerous) {
164
+ const approved = await this.firewall.verifyWithHuman(cmd, firewallResult.reason || 'High-risk token');
165
+ if (!approved) {
166
+ AuditLogger_1.AuditLogger.log({
167
+ timestamp: new Date().toISOString(),
168
+ deviceId: deviceId,
169
+ role: 'auto-healer',
170
+ command: cmd,
171
+ status: 'BLOCKED',
172
+ reason: firewallResult.reason || 'Command denied by administrator.'
173
+ });
174
+ throw new Error(`Command "${cmd}" was blocked by CommandFirewall safety policy.`);
175
+ }
176
+ }
177
+ actSpinner.text = `OODA Loop (Act): Executing command: "${cmd}"...`;
178
+ tx.trackMutation(cmd);
179
+ const out = await session.execute(cmd);
180
+ const check = require('../guardrails/ErrorAnalyzer').ErrorAnalyzer.checkOutput(out);
181
+ if (check.hasError) {
182
+ throw new Error(`CLI Command error: ${check.errorType} - ${out}`);
183
+ }
184
+ appliedCommands.push(cmd);
185
+ AuditLogger_1.AuditLogger.log({
186
+ timestamp: new Date().toISOString(),
187
+ deviceId: deviceId,
188
+ role: 'auto-healer',
189
+ command: cmd,
190
+ status: 'SUCCESS',
191
+ outputSnippet: out
192
+ });
193
+ }
194
+ catch (e) {
195
+ remediationSuccess = false;
196
+ actSpinner.fail(`Failed to execute command: "${cmd}". Error: ${e.message}`);
197
+ AuditLogger_1.AuditLogger.log({
198
+ timestamp: new Date().toISOString(),
199
+ deviceId: deviceId,
200
+ role: 'auto-healer',
201
+ command: cmd,
202
+ status: 'FAILED',
203
+ reason: e.message
204
+ });
205
+ break;
206
+ }
207
+ }
208
+ if (!remediationSuccess) {
209
+ actSpinner.text = 'Automated Rollback: Reverting partial config mutations...';
210
+ const rbLogs = await tx.executeRollback(session);
211
+ actSpinner.fail('Remediation failed. Automated rollback executed.');
212
+ this.logToAudit(`[FAILED-ACT] Device: ${deviceId} | Applied: ${appliedCommands.join(', ')} | Error during act. Rollback executed.`);
213
+ AuditLogger_1.AuditLogger.log({
214
+ timestamp: new Date().toISOString(),
215
+ deviceId: deviceId,
216
+ role: 'auto-healer',
217
+ command: 'automated_rollback',
218
+ status: 'ROLLBACK',
219
+ reason: 'Config recovery due to healing failure'
220
+ });
221
+ this.healingDevices.delete(deviceId);
222
+ return;
223
+ }
224
+ actSpinner.succeed('Remediation commands successfully applied.');
225
+ const verifySpinner = (0, ui_1.createSpinner)('OODA Loop (Verify): Executing verification checks...').start();
226
+ let verifyOutputs = '';
227
+ for (const cmd of diagnosis.verification_commands) {
228
+ try {
229
+ verifySpinner.text = `OODA Loop (Verify): Executing verification: "${cmd}"...`;
230
+ const out = await session.execute(cmd);
231
+ verifyOutputs += `Command: "${cmd}"\nOutput:\n${out}\n\n`;
232
+ AuditLogger_1.AuditLogger.log({
233
+ timestamp: new Date().toISOString(),
234
+ deviceId: deviceId,
235
+ role: 'auto-healer',
236
+ command: cmd,
237
+ status: 'SUCCESS',
238
+ outputSnippet: out
239
+ });
240
+ }
241
+ catch (e) {
242
+ verifyOutputs += `Command: "${cmd}" failed: ${e.message}\n\n`;
243
+ AuditLogger_1.AuditLogger.log({
244
+ timestamp: new Date().toISOString(),
245
+ deviceId: deviceId,
246
+ role: 'auto-healer',
247
+ command: cmd,
248
+ status: 'FAILED',
249
+ reason: e.message
250
+ });
251
+ }
252
+ }
253
+ const isHealed = await this.verifyFixWithLLM(deviceId, msg, diagnosis.detected_issue, verifyOutputs);
254
+ if (isHealed) {
255
+ verifySpinner.succeed('Verification PASSED: Device recovered successfully.');
256
+ this.logToAudit(`[SUCCESS] Device: ${deviceId} | Issue: ${diagnosis.detected_issue} | Remediation: ${appliedCommands.join(', ')}`);
257
+ }
258
+ else {
259
+ verifySpinner.fail('Verification FAILED: The issue is not fully resolved. Triggering rollback...');
260
+ const rbLogs = await tx.executeRollback(session);
261
+ verifySpinner.fail(`Rollback completed successfully.`);
262
+ this.logToAudit(`[FAILED-VERIFY] Device: ${deviceId} | Issue: ${diagnosis.detected_issue} | Verification failed. Rollback executed.`);
263
+ AuditLogger_1.AuditLogger.log({
264
+ timestamp: new Date().toISOString(),
265
+ deviceId: deviceId,
266
+ role: 'auto-healer',
267
+ command: 'automated_rollback',
268
+ status: 'ROLLBACK',
269
+ reason: 'Config recovery due to verification failure'
270
+ });
271
+ }
272
+ }
273
+ catch (e) {
274
+ spinner.fail(`Healing sequence failed: ${e.message}`);
275
+ this.logToAudit(`[ERROR] Device: ${deviceId} | Sequence failed: ${e.message}`);
276
+ }
277
+ finally {
278
+ this.healingDevices.delete(deviceId);
279
+ }
280
+ }
281
+ async gatherContext(deviceId, msg) {
282
+ const session = this.coordinator.getSession(deviceId);
283
+ if (!session) {
284
+ return { commandsRun: [], outputs: 'Connection not available.' };
285
+ }
286
+ const commands = [];
287
+ const ifMatch = /Interface\s+(\S+?)(?:,|\s+changed|$)/i.exec(msg);
288
+ const ifName = ifMatch ? ifMatch[1] : null;
289
+ commands.push('show ip interface brief');
290
+ if (ifName) {
291
+ commands.push(`show interface ${ifName}`);
292
+ commands.push(`show running-config interface ${ifName}`);
293
+ }
294
+ if (msg.includes('OSPF')) {
295
+ commands.push('show ip ospf neighbor');
296
+ commands.push('show ip ospf interface');
297
+ }
298
+ commands.push('show ip route');
299
+ let outputs = '';
300
+ for (const cmd of commands) {
301
+ try {
302
+ const res = await session.execute(cmd);
303
+ outputs += `========================================\nCOMMAND: ${cmd}\n========================================\n${res}\n\n`;
304
+ }
305
+ catch (err) {
306
+ outputs += `========================================\nCOMMAND: ${cmd}\n========================================\nFailed to run: ${err.message}\n\n`;
307
+ }
308
+ }
309
+ return { commandsRun: commands, outputs };
310
+ }
311
+ async diagnose(deviceId, syslog, context) {
312
+ const systemPrompt = `You are an expert Cisco network diagnostic AI agent operating in an AIOps closed-loop healing framework.
313
+ Your task is to analyze the triggering syslog alert and the current state output of the device to:
314
+ 1. Identify the detected issue.
315
+ 2. Determine the root cause.
316
+ 3. Formulate the precise list of Cisco IOS configuration commands to remediate the issue (e.g. going into interface configuration mode if necessary, applying changes, ensuring no shutdown is run if the port was disabled).
317
+ 4. Formulate verification commands to check if the remediation succeeded.
318
+
319
+ You MUST think step-by-step (Chain of Thought).
320
+ Your response MUST end with a single, valid JSON block matching this schema:
321
+ {
322
+ "detected_issue": "short description of issue",
323
+ "root_cause": "root cause description",
324
+ "confidence": 0.0 to 1.0,
325
+ "remediation_commands": ["list", "of", "commands"],
326
+ "verification_commands": ["list", "of", "commands"]
327
+ }
328
+
329
+ Ensure the configuration commands are completely accurate for Cisco IOS syntax. For instance, to modify an interface, you must include the "interface GigabitEthernet0/1" command first.`;
330
+ const userMsg = `Syslog Alert: "${syslog}"\n\nCollected Device Context:\n${context}`;
331
+ const messages = [
332
+ { role: 'system', content: systemPrompt },
333
+ { role: 'user', content: userMsg }
334
+ ];
335
+ const res = await this.llmClient.generateCompletion(messages);
336
+ const rawText = res.content || '';
337
+ const jsonMatch = /\{[\s\S]*\}/.exec(rawText);
338
+ if (!jsonMatch) {
339
+ throw new Error(`Failed to parse JSON from AI response: ${rawText}`);
340
+ }
341
+ try {
342
+ const parsed = JSON.parse(jsonMatch[0]);
343
+ if (!parsed.remediation_commands || !parsed.verification_commands) {
344
+ throw new Error(`Parsed JSON lacks required fields: ${jsonMatch[0]}`);
345
+ }
346
+ return {
347
+ detected_issue: parsed.detected_issue || 'Unknown',
348
+ root_cause: parsed.root_cause || 'Unknown',
349
+ confidence: typeof parsed.confidence === 'number' ? parsed.confidence : 0.5,
350
+ remediation_commands: parsed.remediation_commands || [],
351
+ verification_commands: parsed.verification_commands || []
352
+ };
353
+ }
354
+ catch (err) {
355
+ throw new Error(`JSON parse error of AI response: ${err.message}. Original block: ${jsonMatch[0]}`);
356
+ }
357
+ }
358
+ async verifyFixWithLLM(deviceId, syslog, issue, outputs) {
359
+ const systemPrompt = `You are a network verification validator. Analyze:
360
+ 1. The original syslog alert.
361
+ 2. The detected issue.
362
+ 3. The post-remediation verification command outputs.
363
+
364
+ Determine if the issue has been successfully resolved (e.g. the line protocol changed to up/up, or routing neighbor state is now FULL).
365
+ Your response MUST end with either "SUCCESS" or "FAILED". Do not output any other text after.`;
366
+ const userMsg = `Syslog Alert: "${syslog}"\nDetected Issue: "${issue}"\n\nPost-Remediation Verification Outputs:\n${outputs}`;
367
+ const messages = [
368
+ { role: 'system', content: systemPrompt },
369
+ { role: 'user', content: userMsg }
370
+ ];
371
+ const res = await this.llmClient.generateCompletion(messages);
372
+ const result = (res.content || '').trim().toUpperCase();
373
+ return result.includes('SUCCESS');
374
+ }
375
+ logToAudit(message) {
376
+ const timestamp = new Date().toISOString();
377
+ const formatted = `[${timestamp}] ${message}\n`;
378
+ try {
379
+ fs.appendFileSync(this.logFilePath, formatted, 'utf8');
380
+ }
381
+ catch (e) {
382
+ console.error(`Failed to write to healing audit log:`, e);
383
+ }
384
+ }
385
+ }
386
+ exports.AutoHealer = AutoHealer;
387
+ //# sourceMappingURL=AutoHealer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutoHealer.js","sourceRoot":"","sources":["../../../src/core/agent/AutoHealer.ts"],"names":[],"mappings":"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"}
@@ -58,11 +58,11 @@ class HierarchicalAgentManager {
58
58
  return 'ACCESS';
59
59
  }
60
60
  static getHierarchicalAgentPrompt() {
61
- return `You are operating as a Hierarchical Network Swarm. Tasks are segregated into three agent layers:
62
- - CORE AGENT (Core Routing, OSPF, BGP, Static Routes)
63
- - DISTRIBUTION AGENT (VLANs, ACLs, Security policies, NAT)
64
- - ACCESS AGENT (User ports, Interfaces, Speed/Duplex, IP Assignment)
65
-
61
+ return `You are operating as a Hierarchical Network Swarm. Tasks are segregated into three agent layers:
62
+ - CORE AGENT (Core Routing, OSPF, BGP, Static Routes)
63
+ - DISTRIBUTION AGENT (VLANs, ACLs, Security policies, NAT)
64
+ - ACCESS AGENT (User ports, Interfaces, Speed/Duplex, IP Assignment)
65
+
66
66
  Always specify in your thoughts which agent layer is executing the command (e.g. "[AccessAgent] Modifying interface GigabitEthernet0/1").`;
67
67
  }
68
68
  }
@@ -1,8 +1,10 @@
1
1
  import { BaseSession } from '../../infrastructure/protocols/BaseSession';
2
2
  import { NetworkTopology, SessionState } from '../../shared/types';
3
- export declare class MultiAgentCoordinator {
3
+ import { EventEmitter } from 'events';
4
+ export declare class MultiAgentCoordinator extends EventEmitter {
4
5
  private sessions;
5
6
  private topology;
7
+ constructor();
6
8
  registerSession(deviceId: string, session: BaseSession): void;
7
9
  connectAll(): Promise<void>;
8
10
  executeCommand(deviceId: string, command: string): Promise<string>;
@@ -6,15 +6,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.MultiAgentCoordinator = void 0;
7
7
  const TopologyDiscovery_1 = require("../topology/TopologyDiscovery");
8
8
  const chalk_1 = __importDefault(require("chalk"));
9
- class MultiAgentCoordinator {
9
+ const events_1 = require("events");
10
+ class MultiAgentCoordinator extends events_1.EventEmitter {
10
11
  sessions = new Map();
11
12
  topology = {
12
13
  discoveredAt: new Date(0).toISOString(),
13
14
  nodes: [],
14
15
  links: []
15
16
  };
17
+ constructor() {
18
+ super();
19
+ }
16
20
  registerSession(deviceId, session) {
21
+ session.deviceId = deviceId;
17
22
  this.sessions.set(deviceId, session);
23
+ if (typeof session.onNotification === 'function') {
24
+ session.onNotification((msg, devId) => {
25
+ this.emit('notification', msg, devId);
26
+ });
27
+ }
18
28
  }
19
29
  async connectAll() {
20
30
  console.log(chalk_1.default.cyan(`❯ Establishing parallel connections to ${this.sessions.size} target device(s)...`));
@@ -1 +1 @@
1
- {"version":3,"file":"MultiAgentCoordinator.js","sourceRoot":"","sources":["../../../src/core/agent/MultiAgentCoordinator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MultiAgentCoordinator.js","sourceRoot":"","sources":["../../../src/core/agent/MultiAgentCoordinator.ts"],"names":[],"mappings":"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"}