ciscollm-cli 1.0.8 → 1.0.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.
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.startSimulator = startSimulator;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const http_1 = __importDefault(require("http"));
9
+ const ssh_1 = require("./ssh");
10
+ const telnet_1 = require("./telnet");
11
+ const SSH_PORT = 2222;
12
+ const TELNET_PORT = 2323;
13
+ const HTTP_PORT = 11434;
14
+ const availableModels = [];
15
+ let loadedModel = null;
16
+ const jobs = new Map();
17
+ function getTimestamp() {
18
+ const now = new Date();
19
+ return chalk_1.default.dim(`[${now.toLocaleTimeString()}]`);
20
+ }
21
+ function printDashboard(httpPort) {
22
+ console.clear();
23
+ console.log(chalk_1.default.bold.cyan(`
24
+ ::::::::: :::::::: :::::::: :::::::: :::::::: :::: :::: :::: ::::
25
+ :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: +:+:+: :+:+:+ +:+ +:+:+:
26
+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+:+ +:+ +:+ +:+
27
+ +#++:++#+ +#+ +:+ +#++:++#++ +#++:++#++ +#+ +:+ +#+ +:+ +#+ +#+ +#++:++#+
28
+ +#+ +#+ +:+ +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+
29
+ #+# #+# #+# #+# #+# #+# #+# #+# #+# #+# #+# #+# #+#
30
+ ### ######## ######## ######## ######## ### ### ######### ###
31
+ `));
32
+ console.log(chalk_1.default.bold.yellow(' Cisco IOS Multi-Protocol Test Simulator \n'));
33
+ console.log(chalk_1.default.cyan('┌─────────────────────────────────────────────────────────────────────────────┐'));
34
+ console.log(chalk_1.default.cyan('│') + chalk_1.default.bold.white(' PROTOCOL │ PORT │ STATUS │ CONNECTION URI ') + chalk_1.default.cyan('│'));
35
+ console.log(chalk_1.default.cyan('├────────────┼──────┼───────────┼─────────────────────────────────────────────┤'));
36
+ console.log(chalk_1.default.cyan('│') + ` SSH ` + chalk_1.default.cyan('│') + ` 2222 ` + chalk_1.default.cyan('│') + chalk_1.default.bold.green(' ACTIVE ') + chalk_1.default.cyan('│') + ` ssh://127.0.0.1:2222 ` + chalk_1.default.cyan('│'));
37
+ console.log(chalk_1.default.cyan('│') + ` Telnet ` + chalk_1.default.cyan('│') + ` 2323 ` + chalk_1.default.cyan('│') + chalk_1.default.bold.green(' ACTIVE ') + chalk_1.default.cyan('│') + ` telnet://127.0.0.1:2323 ` + chalk_1.default.cyan('│'));
38
+ console.log(chalk_1.default.cyan('│') + ` NETCONF ` + chalk_1.default.cyan('│') + ` 2222 ` + chalk_1.default.cyan('│') + chalk_1.default.bold.green(' ACTIVE ') + chalk_1.default.cyan('│') + ` netconf://127.0.0.1:2222 (Subsystem) ` + chalk_1.default.cyan('│'));
39
+ const portStr = ` ${httpPort}`.padEnd(6);
40
+ const uriStr = ` http://127.0.0.1:${httpPort}/v1`.padEnd(46);
41
+ console.log(chalk_1.default.cyan('│') + ` HTTP (LLM) ` + chalk_1.default.cyan('│') + portStr + chalk_1.default.cyan('│') + chalk_1.default.bold.green(' ACTIVE ') + chalk_1.default.cyan('│') + uriStr + chalk_1.default.cyan('│'));
42
+ console.log(chalk_1.default.cyan('└─────────────────────────────────────────────────────────────────────────────┘'));
43
+ console.log(chalk_1.default.bold.magenta('\nLogs:'));
44
+ console.log(chalk_1.default.dim('-------------------------------------------------------------------------------'));
45
+ }
46
+ function log(msg) {
47
+ console.log(`${getTimestamp()} ${msg}`);
48
+ }
49
+ function startHttpServer(port, logCb, onBound) {
50
+ const server = http_1.default.createServer((req, res) => {
51
+ const url = req.url || '';
52
+ const method = req.method || 'GET';
53
+ res.setHeader('Access-Control-Allow-Origin', '*');
54
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
55
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
56
+ if (method === 'OPTIONS') {
57
+ res.writeHead(200);
58
+ res.end();
59
+ return;
60
+ }
61
+ logCb(`${chalk_1.default.bold.green('[HTTP]')} ${method} ${url}`);
62
+ if (method === 'GET' && (url === '/api/v1/models' || url === '/v1/models' || url === '/api/tags')) {
63
+ res.writeHead(200, { 'Content-Type': 'application/json' });
64
+ res.end(JSON.stringify({ models: availableModels }));
65
+ return;
66
+ }
67
+ if (method === 'GET' && url === '/api/v1/models/loaded') {
68
+ res.writeHead(200, { 'Content-Type': 'application/json' });
69
+ res.end(JSON.stringify({ model: loadedModel }));
70
+ return;
71
+ }
72
+ if (method === 'POST' && url === '/api/v1/models/download') {
73
+ let body = '';
74
+ req.on('data', chunk => { body += chunk; });
75
+ req.on('end', () => {
76
+ try {
77
+ const data = JSON.parse(body);
78
+ const model = data.model;
79
+ if (!model) {
80
+ res.writeHead(400, { 'Content-Type': 'application/json' });
81
+ res.end(JSON.stringify({ error: 'model parameter is required' }));
82
+ return;
83
+ }
84
+ const jobId = `job-${Math.random().toString(36).substring(2, 9)}`;
85
+ jobs.set(jobId, { model, progress: 0, status: 'downloading' });
86
+ logCb(`Starting download job ${jobId} for model ${model}`);
87
+ const interval = setInterval(() => {
88
+ const job = jobs.get(jobId);
89
+ if (job) {
90
+ if (job.progress < 100) {
91
+ job.progress = Math.min(100, job.progress + 30);
92
+ logCb(`Job ${jobId} progress: ${job.progress}%`);
93
+ if (job.progress === 100) {
94
+ job.status = 'completed';
95
+ if (!availableModels.includes(job.model)) {
96
+ availableModels.push(job.model);
97
+ }
98
+ logCb(`Job ${jobId} completed. Added model ${job.model} to available models.`);
99
+ clearInterval(interval);
100
+ }
101
+ }
102
+ }
103
+ else {
104
+ clearInterval(interval);
105
+ }
106
+ }, 1500);
107
+ res.writeHead(200, { 'Content-Type': 'application/json' });
108
+ res.end(JSON.stringify({ job_id: jobId }));
109
+ }
110
+ catch (e) {
111
+ res.writeHead(400, { 'Content-Type': 'application/json' });
112
+ res.end(JSON.stringify({ error: 'invalid json' }));
113
+ }
114
+ });
115
+ return;
116
+ }
117
+ if (method === 'GET' && url.startsWith('/api/v1/models/download/status/')) {
118
+ const jobId = url.substring('/api/v1/models/download/status/'.length);
119
+ const job = jobs.get(jobId);
120
+ if (!job) {
121
+ res.writeHead(404, { 'Content-Type': 'application/json' });
122
+ res.end(JSON.stringify({ error: 'job not found' }));
123
+ return;
124
+ }
125
+ res.writeHead(200, { 'Content-Type': 'application/json' });
126
+ res.end(JSON.stringify({
127
+ status: job.status,
128
+ progress: `${job.progress}%`
129
+ }));
130
+ return;
131
+ }
132
+ if (method === 'POST' && url === '/api/v1/models/load') {
133
+ let body = '';
134
+ req.on('data', chunk => { body += chunk; });
135
+ req.on('end', () => {
136
+ try {
137
+ const data = JSON.parse(body);
138
+ const model = data.model;
139
+ if (!model) {
140
+ res.writeHead(400, { 'Content-Type': 'application/json' });
141
+ res.end(JSON.stringify({ error: 'model parameter is required' }));
142
+ return;
143
+ }
144
+ logCb(`Loading model ${model} into memory`);
145
+ loadedModel = model;
146
+ res.writeHead(200, { 'Content-Type': 'application/json' });
147
+ res.end(JSON.stringify({ status: 'success', message: `Model ${model} loaded successfully` }));
148
+ }
149
+ catch (e) {
150
+ res.writeHead(400, { 'Content-Type': 'application/json' });
151
+ res.end(JSON.stringify({ error: 'invalid json' }));
152
+ }
153
+ });
154
+ return;
155
+ }
156
+ if (method === 'POST' && (url === '/v1/chat/completions' || url === '/api/v1/chat')) {
157
+ let body = '';
158
+ req.on('data', chunk => { body += chunk; });
159
+ req.on('end', () => {
160
+ try {
161
+ const data = JSON.parse(body);
162
+ if (data.stream) {
163
+ res.writeHead(200, {
164
+ 'Content-Type': 'text/event-stream',
165
+ 'Cache-Control': 'no-cache',
166
+ 'Connection': 'keep-alive'
167
+ });
168
+ const responseChunks = [
169
+ { choices: [{ delta: { role: 'assistant', content: 'Hello' } }] },
170
+ { choices: [{ delta: { content: '!' } }] },
171
+ { choices: [{ delta: { content: ' How **can**' } }] },
172
+ { choices: [{ delta: { content: ' I **' } }] },
173
+ { choices: [{ delta: { content: 'assist**' } }] },
174
+ { choices: [{ delta: { content: ' you?' } }] }
175
+ ];
176
+ let i = 0;
177
+ const interval = setInterval(() => {
178
+ if (i < responseChunks.length) {
179
+ res.write(`data: ${JSON.stringify(responseChunks[i])}\n\n`);
180
+ i++;
181
+ }
182
+ else {
183
+ res.write('data: [DONE]\n\n');
184
+ res.end();
185
+ clearInterval(interval);
186
+ }
187
+ }, 50);
188
+ }
189
+ else {
190
+ res.writeHead(200, { 'Content-Type': 'application/json' });
191
+ res.end(JSON.stringify({
192
+ choices: [{
193
+ message: {
194
+ role: 'assistant',
195
+ content: 'Hello! I am a simulated LLM.'
196
+ }
197
+ }]
198
+ }));
199
+ }
200
+ }
201
+ catch (e) {
202
+ res.writeHead(400, { 'Content-Type': 'application/json' });
203
+ res.end(JSON.stringify({ error: 'invalid json' }));
204
+ }
205
+ });
206
+ return;
207
+ }
208
+ res.writeHead(404, { 'Content-Type': 'application/json' });
209
+ res.end(JSON.stringify({ error: 'not found' }));
210
+ });
211
+ server.on('error', (err) => {
212
+ if (err.code === 'EADDRINUSE') {
213
+ startHttpServer(port + 1, logCb, onBound);
214
+ }
215
+ else {
216
+ logCb(`${chalk_1.default.bold.red('[HTTP]')} Server error: ${err.message}`);
217
+ }
218
+ });
219
+ server.listen(port, '127.0.0.1', () => {
220
+ onBound(port);
221
+ });
222
+ return server;
223
+ }
224
+ function startSimulator(options) {
225
+ let httpServer = null;
226
+ try {
227
+ const sshServer = (0, ssh_1.startSshServer)(options.sshPort, (msg) => {
228
+ log(`${chalk_1.default.bold.blue('[SSH]')} ${msg}`);
229
+ });
230
+ const telnetServer = (0, telnet_1.startTelnetServer)(options.telnetPort, (msg) => {
231
+ log(`${chalk_1.default.bold.yellow('[Telnet]')} ${msg}`);
232
+ });
233
+ httpServer = startHttpServer(options.httpPort, (msg) => {
234
+ log(msg);
235
+ }, (actualPort) => {
236
+ printDashboard(actualPort);
237
+ log(`${chalk_1.default.bold.green('[HTTP]')} HTTP Server listening on port ${actualPort}`);
238
+ log(`${chalk_1.default.bold.blue('[SSH]')} SSH & NETCONF Server listening on port ${options.sshPort}`);
239
+ log(`${chalk_1.default.bold.yellow('[Telnet]')} Telnet Server listening on port ${options.telnetPort}`);
240
+ });
241
+ process.on('SIGINT', () => {
242
+ log(chalk_1.default.red('Shutting down simulator servers...'));
243
+ sshServer.close();
244
+ telnetServer.close();
245
+ if (httpServer)
246
+ httpServer.close();
247
+ process.exit(0);
248
+ });
249
+ }
250
+ catch (e) {
251
+ console.error(chalk_1.default.red(`Failed to start simulator: ${e.message}`));
252
+ }
253
+ }
254
+ if (require.main === module) {
255
+ startSimulator({ sshPort: SSH_PORT, telnetPort: TELNET_PORT, httpPort: HTTP_PORT });
256
+ }
257
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ export type CliMode = 'USER_EXEC' | 'PRIVILEGED_EXEC' | 'GLOBAL_CONFIG' | 'INTERFACE_CONFIG' | 'OSPF_CONFIG' | 'DHCP_CONFIG' | 'ACL_CONFIG';
2
+ export interface InterfaceState {
3
+ name: string;
4
+ ip: string | null;
5
+ subnet: string | null;
6
+ adminShutdown: boolean;
7
+ lineProtocolUp: boolean;
8
+ description: string | null;
9
+ }
10
+ export interface RouteState {
11
+ network: string;
12
+ mask: string;
13
+ nextHop: string | null;
14
+ outgoingInterface: string | null;
15
+ connected: boolean;
16
+ }
17
+ export declare class ShellSimulator {
18
+ hostname: string;
19
+ mode: CliMode;
20
+ activeInterface: string | null;
21
+ interfaces: Map<string, InterfaceState>;
22
+ vlans: Set<number>;
23
+ vlanNames: Map<number, string>;
24
+ activeVlan: number | null;
25
+ routes: RouteState[];
26
+ shellEnabled: boolean;
27
+ shellVariables: Record<string, string>;
28
+ shellFunctions: Record<string, string>;
29
+ ospfEnabled: boolean;
30
+ ospfProcessId: string | null;
31
+ ipRoutingEnabled: boolean;
32
+ flashFiles: Set<string>;
33
+ private pendingCopyDest;
34
+ private backupState;
35
+ private saveBackupState;
36
+ private restoreBackupState;
37
+ constructor(initialHostname?: string);
38
+ getPrompt(): string;
39
+ execute(line: string): string;
40
+ private normalizeInterfaceName;
41
+ private getPrefixLength;
42
+ private calculateNetwork;
43
+ }