ciscollm-cli 1.0.2 → 1.0.4
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 +30 -4
- package/dist/core/agent/AgentLoop.d.ts +1 -0
- package/dist/core/agent/AgentLoop.js +40 -3
- package/dist/core/agent/AgentLoop.js.map +1 -1
- package/dist/core/agent/MultiAgentCoordinator.js +9 -5
- package/dist/core/agent/MultiAgentCoordinator.js.map +1 -1
- package/dist/core/agent/PromptEngine.js +2 -2
- package/dist/core/rollback/TransactionManager.js +22 -18
- package/dist/core/rollback/TransactionManager.js.map +1 -1
- package/dist/index.js +154 -9
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/protocols/BaseSession.d.ts +3 -0
- package/dist/infrastructure/protocols/BaseSession.js +14 -0
- package/dist/infrastructure/protocols/BaseSession.js.map +1 -1
- package/dist/infrastructure/protocols/CmlSession.d.ts +15 -0
- package/dist/infrastructure/protocols/CmlSession.js +416 -28
- package/dist/infrastructure/protocols/CmlSession.js.map +1 -1
- package/dist/infrastructure/protocols/MockSession.js +6 -2
- package/dist/infrastructure/protocols/MockSession.js.map +1 -1
- package/dist/infrastructure/protocols/NetconfSession.d.ts +67 -2
- package/dist/infrastructure/protocols/NetconfSession.js +530 -42
- package/dist/infrastructure/protocols/NetconfSession.js.map +1 -1
- package/dist/infrastructure/protocols/PlinkSerial.d.ts +2 -0
- package/dist/infrastructure/protocols/PlinkSerial.js +79 -39
- package/dist/infrastructure/protocols/PlinkSerial.js.map +1 -1
- package/dist/infrastructure/protocols/SshSession.d.ts +2 -0
- package/dist/infrastructure/protocols/SshSession.js +54 -18
- package/dist/infrastructure/protocols/SshSession.js.map +1 -1
- package/dist/infrastructure/protocols/TelnetSession.d.ts +2 -0
- package/dist/infrastructure/protocols/TelnetSession.js +45 -17
- package/dist/infrastructure/protocols/TelnetSession.js.map +1 -1
- package/package.json +4 -2
|
@@ -71,7 +71,7 @@ class PlinkSerialSession extends BaseSession_1.BaseSession {
|
|
|
71
71
|
else if (fs.existsSync(nextToExecPath)) {
|
|
72
72
|
plinkPath = nextToExecPath;
|
|
73
73
|
}
|
|
74
|
-
console.log(chalk_1.default.
|
|
74
|
+
console.log(chalk_1.default.cyan(`❯ Spawning connection via serial port ${this.comPort}...`));
|
|
75
75
|
this.process = (0, child_process_1.spawn)(plinkPath, args);
|
|
76
76
|
this.process.stdin.setDefaultEncoding('utf-8');
|
|
77
77
|
let finished = false;
|
|
@@ -80,6 +80,11 @@ class PlinkSerialSession extends BaseSession_1.BaseSession {
|
|
|
80
80
|
return;
|
|
81
81
|
finished = true;
|
|
82
82
|
clearTimeout(connectTimer);
|
|
83
|
+
this.eventEmitter.removeListener('stream_updated', onStreamUpdate);
|
|
84
|
+
if (this.process) {
|
|
85
|
+
this.process.kill('SIGKILL');
|
|
86
|
+
this.process = null;
|
|
87
|
+
}
|
|
83
88
|
const available = await PlinkSerialSession.listAvailableComPorts();
|
|
84
89
|
const portMsg = available.length > 0
|
|
85
90
|
? `Active COM ports detected: ${available.join(', ')}`
|
|
@@ -87,54 +92,79 @@ class PlinkSerialSession extends BaseSession_1.BaseSession {
|
|
|
87
92
|
reject(new Error(`${errMessage}. ${portMsg}`));
|
|
88
93
|
};
|
|
89
94
|
this.process.stdin.on('error', (err) => {
|
|
90
|
-
console.error(chalk_1.default.
|
|
95
|
+
console.error(chalk_1.default.red(`⚠ Stdin Error: ${err.message}`));
|
|
91
96
|
});
|
|
92
97
|
this.process.stdout.on('data', (data) => this.handleData(data));
|
|
93
98
|
this.process.stderr.on('data', (data) => {
|
|
94
|
-
console.error(chalk_1.default.
|
|
99
|
+
console.error(chalk_1.default.red(`⚠ Stderr: ${data.toString()}`));
|
|
95
100
|
});
|
|
96
101
|
this.process.on('error', async (err) => {
|
|
97
102
|
await cleanupAndReject(`Failed to start plink process: ${err.message}`);
|
|
98
103
|
});
|
|
99
104
|
this.process.on('close', async (code) => {
|
|
100
|
-
console.log(chalk_1.default.
|
|
105
|
+
console.log(chalk_1.default.gray(`❯ Plink process closed with code ${code}`));
|
|
101
106
|
await cleanupAndReject(`plink process exited prematurely with code ${code}`);
|
|
102
107
|
});
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
108
|
+
const onStreamUpdate = async () => {
|
|
109
|
+
const match = constants_1.PROMPT_REGEX.exec(this.buffer);
|
|
110
|
+
if (match) {
|
|
111
|
+
this.eventEmitter.removeListener('stream_updated', onStreamUpdate);
|
|
112
|
+
clearTimeout(connectTimer);
|
|
113
|
+
this.updateStateFromPrompt(match[1]);
|
|
114
|
+
console.log(chalk_1.default.cyan(`❯ Disabling pagination with 'terminal length 0'...`));
|
|
115
|
+
await this.execute('terminal length 0').catch(err => {
|
|
116
|
+
console.warn(chalk_1.default.yellow(`⚠ Failed to set terminal length 0: ${err.message}`));
|
|
117
|
+
});
|
|
118
|
+
finished = true;
|
|
119
|
+
if (this.process) {
|
|
120
|
+
this.process.removeAllListeners('close');
|
|
121
|
+
this.process.on('close', (code) => {
|
|
122
|
+
console.log(chalk_1.default.gray(`❯ Plink process closed with code ${code}`));
|
|
116
123
|
});
|
|
117
|
-
resolve();
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
await cleanupAndReject(`Failed to sync serial prompt on ${this.comPort}`);
|
|
121
124
|
}
|
|
125
|
+
resolve();
|
|
122
126
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
},
|
|
127
|
+
};
|
|
128
|
+
const connectTimer = setTimeout(async () => {
|
|
129
|
+
await cleanupAndReject(`Failed to sync serial prompt on ${this.comPort} due to timeout.`);
|
|
130
|
+
}, 15000);
|
|
131
|
+
this.eventEmitter.on('stream_updated', onStreamUpdate);
|
|
132
|
+
onStreamUpdate();
|
|
127
133
|
});
|
|
128
134
|
}
|
|
129
|
-
|
|
130
|
-
const
|
|
131
|
-
this.buffer
|
|
132
|
-
|
|
133
|
-
if (this.process && !this.process.killed) {
|
|
135
|
+
cleanBuffer() {
|
|
136
|
+
const globalMoreRegex = new RegExp(constants_1.MORE_REGEX.source, 'gi');
|
|
137
|
+
if (globalMoreRegex.test(this.buffer)) {
|
|
138
|
+
if (this.process && !this.process.killed && this.process.stdin.writable) {
|
|
134
139
|
this.process.stdin.write(' ');
|
|
135
140
|
}
|
|
136
|
-
this.buffer = this.buffer.replace(
|
|
141
|
+
this.buffer = this.buffer.replace(globalMoreRegex, '');
|
|
142
|
+
}
|
|
143
|
+
this.buffer = this.buffer.replace(/[\x08\b]+/g, '');
|
|
144
|
+
}
|
|
145
|
+
extractSyslogs() {
|
|
146
|
+
const lines = this.buffer.split(/\r?\n/);
|
|
147
|
+
if (lines.length <= 1)
|
|
148
|
+
return;
|
|
149
|
+
const completedLines = lines.slice(0, -1);
|
|
150
|
+
const lastLine = lines[lines.length - 1];
|
|
151
|
+
const remainingLines = [];
|
|
152
|
+
for (const line of completedLines) {
|
|
153
|
+
if (/%[A-Za-z0-9_]+-[0-7]-[A-Za-z0-9_]+:/.test(line)) {
|
|
154
|
+
console.log(chalk_1.default.yellow(`[Syslog Notification] ${line}`));
|
|
155
|
+
this.emitNotification(line);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
remainingLines.push(line);
|
|
159
|
+
}
|
|
137
160
|
}
|
|
161
|
+
this.buffer = remainingLines.join('\n') + (remainingLines.length > 0 ? '\n' : '') + lastLine;
|
|
162
|
+
}
|
|
163
|
+
handleData(data) {
|
|
164
|
+
const chunk = data.toString('utf-8');
|
|
165
|
+
this.buffer += chunk;
|
|
166
|
+
this.cleanBuffer();
|
|
167
|
+
this.extractSyslogs();
|
|
138
168
|
this.eventEmitter.emit('stream_updated');
|
|
139
169
|
}
|
|
140
170
|
async execute(command, timeoutMs = 15000) {
|
|
@@ -143,18 +173,22 @@ class PlinkSerialSession extends BaseSession_1.BaseSession {
|
|
|
143
173
|
throw new Error('Process is inactive. Cannot execute command.');
|
|
144
174
|
}
|
|
145
175
|
return new Promise((resolve, reject) => {
|
|
146
|
-
this.buffer
|
|
176
|
+
const commandStartIndex = this.buffer.length;
|
|
147
177
|
const timeout = setTimeout(() => {
|
|
148
178
|
this.eventEmitter.removeAllListeners('stream_updated');
|
|
149
179
|
reject(new Error(`Command execution timed out after ${timeoutMs}ms: "${command}"`));
|
|
150
180
|
}, timeoutMs);
|
|
151
181
|
this.eventEmitter.on('stream_updated', () => {
|
|
152
|
-
const
|
|
182
|
+
const commandOutput = this.buffer.slice(commandStartIndex);
|
|
183
|
+
const match = constants_1.PROMPT_REGEX.exec(commandOutput);
|
|
153
184
|
if (match) {
|
|
154
185
|
clearTimeout(timeout);
|
|
155
186
|
this.eventEmitter.removeAllListeners('stream_updated');
|
|
156
|
-
const fullOutput =
|
|
187
|
+
const fullOutput = commandOutput;
|
|
157
188
|
this.updateStateFromPrompt(match[1]);
|
|
189
|
+
const matchIndex = commandOutput.indexOf(match[0]);
|
|
190
|
+
const newStart = commandStartIndex + matchIndex + match[0].length;
|
|
191
|
+
this.buffer = this.buffer.slice(newStart);
|
|
158
192
|
resolve(fullOutput);
|
|
159
193
|
}
|
|
160
194
|
});
|
|
@@ -182,9 +216,15 @@ class PlinkSerialSession extends BaseSession_1.BaseSession {
|
|
|
182
216
|
}
|
|
183
217
|
async disconnect() {
|
|
184
218
|
if (this.process) {
|
|
185
|
-
console.log(chalk_1.default.
|
|
186
|
-
this.process
|
|
219
|
+
console.log(chalk_1.default.gray(`❯ Detaching sub-process pipelines...`));
|
|
220
|
+
const proc = this.process;
|
|
187
221
|
this.process = null;
|
|
222
|
+
proc.kill('SIGTERM');
|
|
223
|
+
setTimeout(() => {
|
|
224
|
+
if (!proc.killed) {
|
|
225
|
+
proc.kill('SIGKILL');
|
|
226
|
+
}
|
|
227
|
+
}, 500);
|
|
188
228
|
}
|
|
189
229
|
}
|
|
190
230
|
getProcess() {
|
|
@@ -193,7 +233,7 @@ class PlinkSerialSession extends BaseSession_1.BaseSession {
|
|
|
193
233
|
static async listAvailableComPorts() {
|
|
194
234
|
return new Promise((resolve) => {
|
|
195
235
|
const { exec } = require('child_process');
|
|
196
|
-
const cmd = '
|
|
236
|
+
const cmd = 'reg query HKLM\\HARDWARE\\DEVICEMAP\\SERIALCOMM';
|
|
197
237
|
exec(cmd, (error, stdout) => {
|
|
198
238
|
if (error) {
|
|
199
239
|
resolve([]);
|
|
@@ -202,9 +242,9 @@ class PlinkSerialSession extends BaseSession_1.BaseSession {
|
|
|
202
242
|
const ports = [];
|
|
203
243
|
const lines = stdout.split(/\r?\n/).map(l => l.trim()).filter(l => l.length > 0);
|
|
204
244
|
for (const line of lines) {
|
|
205
|
-
const match = /\(
|
|
245
|
+
const match = /\b(COM\d+)\b/i.exec(line);
|
|
206
246
|
if (match) {
|
|
207
|
-
ports.push(match[1]);
|
|
247
|
+
ports.push(match[1].toUpperCase());
|
|
208
248
|
}
|
|
209
249
|
}
|
|
210
250
|
resolve(ports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlinkSerial.js","sourceRoot":"","sources":["../../../src/infrastructure/protocols/PlinkSerial.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAsE;AACtE,+CAA4C;AAC5C,mCAAsC;AACtC,sDAAkE;AAClE,kDAA0B;AAC1B,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAa,kBAAmB,SAAQ,yBAAW;IAMnC;IACA;IANJ,OAAO,GAA0C,IAAI,CAAC;IACtD,MAAM,GAAW,EAAE,CAAC;IACpB,YAAY,GAAG,IAAI,qBAAY,EAAE,CAAC;IAE1C,YACY,OAAe,EACf,WAAmB,IAAI;QAE/B,KAAK,EAAE,CAAC;QAHA,YAAO,GAAP,OAAO,CAAQ;QACf,aAAQ,GAAR,QAAQ,CAAe;IAGnC,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,QAAQ,UAAU,CAAC,CAAC;YAExF,IAAI,SAAS,GAAG,WAAW,CAAC;YAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;YAC9D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAC/E,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAE5D,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9B,SAAS,GAAG,YAAY,CAAC;YAC7B,CAAC;iBAAM,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACxC,SAAS,GAAG,eAAe,CAAC;YAChC,CAAC;iBAAM,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBACvC,SAAS,GAAG,cAAc,CAAC;YAC/B,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"PlinkSerial.js","sourceRoot":"","sources":["../../../src/infrastructure/protocols/PlinkSerial.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,8 @@ export declare class SshSession extends BaseSession {
|
|
|
13
13
|
privateKey?: string;
|
|
14
14
|
});
|
|
15
15
|
connect(): Promise<void>;
|
|
16
|
+
private cleanBuffer;
|
|
17
|
+
private extractSyslogs;
|
|
16
18
|
private handleData;
|
|
17
19
|
execute(command: string, timeoutMs?: number): Promise<string>;
|
|
18
20
|
disconnect(): Promise<void>;
|
|
@@ -23,7 +23,7 @@ class SshSession extends BaseSession_1.BaseSession {
|
|
|
23
23
|
return new Promise((resolve, reject) => {
|
|
24
24
|
this.client = new ssh2_1.Client();
|
|
25
25
|
this.client.on('ready', () => {
|
|
26
|
-
console.log(chalk_1.default.
|
|
26
|
+
console.log(chalk_1.default.cyan(`❯ SSH connection ready to host ${this.config.host}. Launching interactive shell...`));
|
|
27
27
|
this.client.shell((err, stream) => {
|
|
28
28
|
if (err) {
|
|
29
29
|
return reject(new Error(`Failed to open SSH shell channel: ${err.message}`));
|
|
@@ -31,19 +31,27 @@ class SshSession extends BaseSession_1.BaseSession {
|
|
|
31
31
|
this.channel = stream;
|
|
32
32
|
this.channel.on('data', (data) => this.handleData(data));
|
|
33
33
|
this.channel.on('close', () => {
|
|
34
|
-
console.log(chalk_1.default.
|
|
34
|
+
console.log(chalk_1.default.gray(`❯ SSH channel closed.`));
|
|
35
35
|
});
|
|
36
|
-
|
|
36
|
+
const onStreamUpdate = async () => {
|
|
37
37
|
const match = constants_1.PROMPT_REGEX.exec(this.buffer);
|
|
38
38
|
if (match) {
|
|
39
|
+
this.eventEmitter.removeListener('stream_updated', onStreamUpdate);
|
|
40
|
+
clearTimeout(connectTimeout);
|
|
39
41
|
this.updateStateFromPrompt(match[1]);
|
|
42
|
+
console.log(chalk_1.default.cyan(`❯ Disabling pagination with 'terminal length 0'...`));
|
|
43
|
+
await this.execute('terminal length 0').catch(err => {
|
|
44
|
+
console.warn(chalk_1.default.yellow(`⚠ Failed to set terminal length 0: ${err.message}`));
|
|
45
|
+
});
|
|
46
|
+
resolve();
|
|
40
47
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
|
|
48
|
+
};
|
|
49
|
+
const connectTimeout = setTimeout(() => {
|
|
50
|
+
this.eventEmitter.removeListener('stream_updated', onStreamUpdate);
|
|
51
|
+
reject(new Error(`SSH prompt detection timed out after 15000ms. Received: ${this.buffer}`));
|
|
52
|
+
}, 15000);
|
|
53
|
+
this.eventEmitter.on('stream_updated', onStreamUpdate);
|
|
54
|
+
onStreamUpdate();
|
|
47
55
|
});
|
|
48
56
|
});
|
|
49
57
|
this.client.on('error', (err) => {
|
|
@@ -59,15 +67,39 @@ class SshSession extends BaseSession_1.BaseSession {
|
|
|
59
67
|
});
|
|
60
68
|
});
|
|
61
69
|
}
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
this.buffer
|
|
65
|
-
if (constants_1.MORE_REGEX.test(this.buffer)) {
|
|
70
|
+
cleanBuffer() {
|
|
71
|
+
const globalMoreRegex = new RegExp(constants_1.MORE_REGEX.source, 'gi');
|
|
72
|
+
if (globalMoreRegex.test(this.buffer)) {
|
|
66
73
|
if (this.channel) {
|
|
67
74
|
this.channel.write(' ');
|
|
68
75
|
}
|
|
69
|
-
this.buffer = this.buffer.replace(
|
|
76
|
+
this.buffer = this.buffer.replace(globalMoreRegex, '');
|
|
70
77
|
}
|
|
78
|
+
this.buffer = this.buffer.replace(/[\x08\b]+/g, '');
|
|
79
|
+
}
|
|
80
|
+
extractSyslogs() {
|
|
81
|
+
const lines = this.buffer.split(/\r?\n/);
|
|
82
|
+
if (lines.length <= 1)
|
|
83
|
+
return;
|
|
84
|
+
const completedLines = lines.slice(0, -1);
|
|
85
|
+
const lastLine = lines[lines.length - 1];
|
|
86
|
+
const remainingLines = [];
|
|
87
|
+
for (const line of completedLines) {
|
|
88
|
+
if (/%[A-Za-z0-9_]+-[0-7]-[A-Za-z0-9_]+:/.test(line)) {
|
|
89
|
+
console.log(chalk_1.default.yellow(`[Syslog Notification] ${line}`));
|
|
90
|
+
this.emitNotification(line);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
remainingLines.push(line);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
this.buffer = remainingLines.join('\n') + (remainingLines.length > 0 ? '\n' : '') + lastLine;
|
|
97
|
+
}
|
|
98
|
+
handleData(data) {
|
|
99
|
+
const chunk = data.toString('utf-8');
|
|
100
|
+
this.buffer += chunk;
|
|
101
|
+
this.cleanBuffer();
|
|
102
|
+
this.extractSyslogs();
|
|
71
103
|
this.eventEmitter.emit('stream_updated');
|
|
72
104
|
}
|
|
73
105
|
async execute(command, timeoutMs = 15000) {
|
|
@@ -76,18 +108,22 @@ class SshSession extends BaseSession_1.BaseSession {
|
|
|
76
108
|
throw new Error('SSH channel is inactive. Cannot execute command.');
|
|
77
109
|
}
|
|
78
110
|
return new Promise((resolve, reject) => {
|
|
79
|
-
this.buffer
|
|
111
|
+
const commandStartIndex = this.buffer.length;
|
|
80
112
|
const timeout = setTimeout(() => {
|
|
81
113
|
this.eventEmitter.removeAllListeners('stream_updated');
|
|
82
114
|
reject(new Error(`SSH Command execution timed out after ${timeoutMs}ms: "${command}"`));
|
|
83
115
|
}, timeoutMs);
|
|
84
116
|
this.eventEmitter.on('stream_updated', () => {
|
|
85
|
-
const
|
|
117
|
+
const commandOutput = this.buffer.slice(commandStartIndex);
|
|
118
|
+
const match = constants_1.PROMPT_REGEX.exec(commandOutput);
|
|
86
119
|
if (match) {
|
|
87
120
|
clearTimeout(timeout);
|
|
88
121
|
this.eventEmitter.removeAllListeners('stream_updated');
|
|
89
|
-
const fullOutput =
|
|
122
|
+
const fullOutput = commandOutput;
|
|
90
123
|
this.updateStateFromPrompt(match[1]);
|
|
124
|
+
const matchIndex = commandOutput.indexOf(match[0]);
|
|
125
|
+
const newStart = commandStartIndex + matchIndex + match[0].length;
|
|
126
|
+
this.buffer = this.buffer.slice(newStart);
|
|
91
127
|
resolve(fullOutput);
|
|
92
128
|
}
|
|
93
129
|
});
|
|
@@ -103,7 +139,7 @@ class SshSession extends BaseSession_1.BaseSession {
|
|
|
103
139
|
this.client.end();
|
|
104
140
|
this.client = null;
|
|
105
141
|
}
|
|
106
|
-
console.log(chalk_1.default.
|
|
142
|
+
console.log(chalk_1.default.green(`✔ SSH Session to ${this.config.host} disconnected cleanly.`));
|
|
107
143
|
}
|
|
108
144
|
}
|
|
109
145
|
exports.SshSession = SshSession;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SshSession.js","sourceRoot":"","sources":["../../../src/infrastructure/protocols/SshSession.ts"],"names":[],"mappings":";;;;;;AAAA,+BAA6C;AAC7C,+CAA4C;AAC5C,mCAAsC;AACtC,sDAAkE;AAClE,kDAA0B;AAE1B,MAAa,UAAW,SAAQ,yBAAW;IAO3B;IANJ,MAAM,GAAkB,IAAI,CAAC;IAC7B,OAAO,GAAyB,IAAI,CAAC;IACrC,MAAM,GAAW,EAAE,CAAC;IACpB,YAAY,GAAG,IAAI,qBAAY,EAAE,CAAC;IAE1C,YACY,MAMP;QAED,KAAK,EAAE,CAAC;QARA,WAAM,GAAN,MAAM,CAMb;IAGL,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,CAAC,MAAM,GAAG,IAAI,aAAM,EAAE,CAAC;YAE3B,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"SshSession.js","sourceRoot":"","sources":["../../../src/infrastructure/protocols/SshSession.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@ export declare class TelnetSession extends BaseSession {
|
|
|
11
11
|
password?: string;
|
|
12
12
|
});
|
|
13
13
|
connect(): Promise<void>;
|
|
14
|
+
private cleanBuffer;
|
|
15
|
+
private extractSyslogs;
|
|
14
16
|
private handleRawData;
|
|
15
17
|
execute(command: string, timeoutMs?: number): Promise<string>;
|
|
16
18
|
disconnect(): Promise<void>;
|
|
@@ -54,16 +54,16 @@ class TelnetSession extends BaseSession_1.BaseSession {
|
|
|
54
54
|
async connect() {
|
|
55
55
|
return new Promise((resolve, reject) => {
|
|
56
56
|
const port = this.config.port || 23;
|
|
57
|
-
console.log(chalk_1.default.
|
|
57
|
+
console.log(chalk_1.default.cyan(`❯ Connecting to telnet host ${this.config.host}:${port}...`));
|
|
58
58
|
this.socket = net.createConnection({ host: this.config.host, port }, () => {
|
|
59
|
-
console.log(chalk_1.default.
|
|
59
|
+
console.log(chalk_1.default.green(`✔ TCP socket connection established.`));
|
|
60
60
|
});
|
|
61
61
|
this.socket.on('data', (data) => this.handleRawData(data));
|
|
62
62
|
this.socket.on('error', (err) => {
|
|
63
63
|
reject(new Error(`Telnet Socket Error: ${err.message}`));
|
|
64
64
|
});
|
|
65
65
|
this.socket.on('close', () => {
|
|
66
|
-
console.log(chalk_1.default.
|
|
66
|
+
console.log(chalk_1.default.gray(`❯ Telnet socket connection closed.`));
|
|
67
67
|
});
|
|
68
68
|
let loginState = 'USER';
|
|
69
69
|
const connectTimeout = setTimeout(() => {
|
|
@@ -73,13 +73,13 @@ class TelnetSession extends BaseSession_1.BaseSession {
|
|
|
73
73
|
const checkState = async () => {
|
|
74
74
|
const lowerBuf = this.buffer.toLowerCase();
|
|
75
75
|
if (loginState === 'USER' && (lowerBuf.includes('username:') || lowerBuf.includes('login:'))) {
|
|
76
|
-
console.log(chalk_1.default.
|
|
76
|
+
console.log(chalk_1.default.cyan(`❯ Sending username...`));
|
|
77
77
|
this.socket?.write(`${this.config.username || ''}\r\n`);
|
|
78
78
|
this.buffer = '';
|
|
79
79
|
loginState = 'PASS';
|
|
80
80
|
}
|
|
81
81
|
else if (loginState === 'PASS' && lowerBuf.includes('password:')) {
|
|
82
|
-
console.log(chalk_1.default.
|
|
82
|
+
console.log(chalk_1.default.cyan(`❯ Sending password...`));
|
|
83
83
|
this.socket?.write(`${this.config.password || ''}\r\n`);
|
|
84
84
|
this.buffer = '';
|
|
85
85
|
loginState = 'PROMPT';
|
|
@@ -90,9 +90,9 @@ class TelnetSession extends BaseSession_1.BaseSession {
|
|
|
90
90
|
clearTimeout(connectTimeout);
|
|
91
91
|
this.eventEmitter.removeListener('stream_updated', checkState);
|
|
92
92
|
this.updateStateFromPrompt(match[1]);
|
|
93
|
-
console.log(chalk_1.default.
|
|
93
|
+
console.log(chalk_1.default.green(`✔ Logged in successfully. Syncing terminal settings...`));
|
|
94
94
|
await this.execute('terminal length 0').catch(err => {
|
|
95
|
-
console.warn(chalk_1.default.
|
|
95
|
+
console.warn(chalk_1.default.yellow(`⚠ Failed to set terminal length 0: ${err.message}`));
|
|
96
96
|
});
|
|
97
97
|
resolve();
|
|
98
98
|
}
|
|
@@ -101,6 +101,34 @@ class TelnetSession extends BaseSession_1.BaseSession {
|
|
|
101
101
|
this.eventEmitter.on('stream_updated', checkState);
|
|
102
102
|
});
|
|
103
103
|
}
|
|
104
|
+
cleanBuffer() {
|
|
105
|
+
const globalMoreRegex = new RegExp(constants_1.MORE_REGEX.source, 'gi');
|
|
106
|
+
if (globalMoreRegex.test(this.buffer)) {
|
|
107
|
+
if (this.socket && !this.socket.destroyed) {
|
|
108
|
+
this.socket.write(' ');
|
|
109
|
+
}
|
|
110
|
+
this.buffer = this.buffer.replace(globalMoreRegex, '');
|
|
111
|
+
}
|
|
112
|
+
this.buffer = this.buffer.replace(/[\x08\b]+/g, '');
|
|
113
|
+
}
|
|
114
|
+
extractSyslogs() {
|
|
115
|
+
const lines = this.buffer.split(/\r?\n/);
|
|
116
|
+
if (lines.length <= 1)
|
|
117
|
+
return;
|
|
118
|
+
const completedLines = lines.slice(0, -1);
|
|
119
|
+
const lastLine = lines[lines.length - 1];
|
|
120
|
+
const remainingLines = [];
|
|
121
|
+
for (const line of completedLines) {
|
|
122
|
+
if (/%[A-Za-z0-9_]+-[0-7]-[A-Za-z0-9_]+:/.test(line)) {
|
|
123
|
+
console.log(chalk_1.default.yellow(`[Syslog Notification] ${line}`));
|
|
124
|
+
this.emitNotification(line);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
remainingLines.push(line);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
this.buffer = remainingLines.join('\n') + (remainingLines.length > 0 ? '\n' : '') + lastLine;
|
|
131
|
+
}
|
|
104
132
|
handleRawData(data) {
|
|
105
133
|
const cleaned = [];
|
|
106
134
|
let i = 0;
|
|
@@ -132,12 +160,8 @@ class TelnetSession extends BaseSession_1.BaseSession {
|
|
|
132
160
|
if (cleaned.length > 0) {
|
|
133
161
|
const chunk = Buffer.from(cleaned).toString('utf-8');
|
|
134
162
|
this.buffer += chunk;
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
this.socket.write(' ');
|
|
138
|
-
}
|
|
139
|
-
this.buffer = this.buffer.replace(constants_1.MORE_REGEX, '');
|
|
140
|
-
}
|
|
163
|
+
this.cleanBuffer();
|
|
164
|
+
this.extractSyslogs();
|
|
141
165
|
this.eventEmitter.emit('stream_updated');
|
|
142
166
|
}
|
|
143
167
|
}
|
|
@@ -147,18 +171,22 @@ class TelnetSession extends BaseSession_1.BaseSession {
|
|
|
147
171
|
throw new Error('Telnet socket is inactive. Cannot execute command.');
|
|
148
172
|
}
|
|
149
173
|
return new Promise((resolve, reject) => {
|
|
150
|
-
this.buffer
|
|
174
|
+
const commandStartIndex = this.buffer.length;
|
|
151
175
|
const timeout = setTimeout(() => {
|
|
152
176
|
this.eventEmitter.removeAllListeners('stream_updated');
|
|
153
177
|
reject(new Error(`Telnet command execution timed out after ${timeoutMs}ms: "${command}"`));
|
|
154
178
|
}, timeoutMs);
|
|
155
179
|
this.eventEmitter.on('stream_updated', () => {
|
|
156
|
-
const
|
|
180
|
+
const commandOutput = this.buffer.slice(commandStartIndex);
|
|
181
|
+
const match = constants_1.PROMPT_REGEX.exec(commandOutput);
|
|
157
182
|
if (match) {
|
|
158
183
|
clearTimeout(timeout);
|
|
159
184
|
this.eventEmitter.removeAllListeners('stream_updated');
|
|
160
|
-
const fullOutput =
|
|
185
|
+
const fullOutput = commandOutput;
|
|
161
186
|
this.updateStateFromPrompt(match[1]);
|
|
187
|
+
const matchIndex = commandOutput.indexOf(match[0]);
|
|
188
|
+
const newStart = commandStartIndex + matchIndex + match[0].length;
|
|
189
|
+
this.buffer = this.buffer.slice(newStart);
|
|
162
190
|
resolve(fullOutput);
|
|
163
191
|
}
|
|
164
192
|
});
|
|
@@ -170,7 +198,7 @@ class TelnetSession extends BaseSession_1.BaseSession {
|
|
|
170
198
|
this.socket.destroy();
|
|
171
199
|
this.socket = null;
|
|
172
200
|
}
|
|
173
|
-
console.log(chalk_1.default.
|
|
201
|
+
console.log(chalk_1.default.green(`✔ Telnet Session to ${this.config.host} disconnected cleanly.`));
|
|
174
202
|
}
|
|
175
203
|
}
|
|
176
204
|
exports.TelnetSession = TelnetSession;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelnetSession.js","sourceRoot":"","sources":["../../../src/infrastructure/protocols/TelnetSession.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2B;AAC3B,+CAA4C;AAC5C,mCAAsC;AACtC,sDAAkE;AAClE,kDAA0B;AAE1B,MAAa,aAAc,SAAQ,yBAAW;IAM9B;IALJ,MAAM,GAAsB,IAAI,CAAC;IACjC,MAAM,GAAW,EAAE,CAAC;IACpB,YAAY,GAAG,IAAI,qBAAY,EAAE,CAAC;IAE1C,YACY,MAKP;QAED,KAAK,EAAE,CAAC;QAPA,WAAM,GAAN,MAAM,CAKb;IAGL,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"TelnetSession.js","sourceRoot":"","sources":["../../../src/infrastructure/protocols/TelnetSession.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ciscollm-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "Cisco IOS automation agent CLI with mock simulation, guardrails, and LLM tool-calling support.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -37,12 +37,14 @@
|
|
|
37
37
|
"inquirer": "^8.2.6",
|
|
38
38
|
"ora": "^5.4.1",
|
|
39
39
|
"pdf-parse": "^2.4.5",
|
|
40
|
-
"ssh2": "^1.15.0"
|
|
40
|
+
"ssh2": "^1.15.0",
|
|
41
|
+
"xml2js": "^0.6.2"
|
|
41
42
|
},
|
|
42
43
|
"devDependencies": {
|
|
43
44
|
"@types/inquirer": "^8.2.10",
|
|
44
45
|
"@types/node": "^20.12.7",
|
|
45
46
|
"@types/ssh2": "^1.15.0",
|
|
47
|
+
"@types/xml2js": "^0.4.14",
|
|
46
48
|
"ts-node": "^10.9.2",
|
|
47
49
|
"typescript": "^5.4.5"
|
|
48
50
|
}
|