@integsec/mcp-pentester-cli 1.0.3 → 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.
@@ -1,23 +1,110 @@
1
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
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
39
  exports.WebSocketTransport = void 0;
7
40
  const ws_1 = __importDefault(require("ws"));
41
+ const fs = __importStar(require("fs"));
8
42
  const http_proxy_agent_1 = require("http-proxy-agent");
9
43
  const https_proxy_agent_1 = require("https-proxy-agent");
10
44
  const socks_proxy_agent_1 = require("socks-proxy-agent");
11
45
  const base_1 = require("./base");
12
46
  class WebSocketTransport extends base_1.Transport {
13
- constructor(url, proxyConfig) {
47
+ constructor(url, proxyConfig, authConfig, certificateConfig, customHeaders) {
14
48
  super();
15
49
  this.url = url;
16
50
  this.proxyConfig = proxyConfig;
51
+ this.authConfig = authConfig;
52
+ this.certificateConfig = certificateConfig;
53
+ this.authHeaders = {};
54
+ this.customHeaders = {};
55
+ this.customHeaders = customHeaders || {};
56
+ this.setupAuthHeaders();
17
57
  this.setupAgent();
18
58
  }
59
+ setupAuthHeaders() {
60
+ if (!this.authConfig) {
61
+ return;
62
+ }
63
+ switch (this.authConfig.type) {
64
+ case 'bearer':
65
+ if (this.authConfig.token) {
66
+ this.authHeaders['Authorization'] = `Bearer ${this.authConfig.token}`;
67
+ }
68
+ break;
69
+ case 'basic':
70
+ if (this.authConfig.username && this.authConfig.password) {
71
+ const credentials = Buffer.from(`${this.authConfig.username}:${this.authConfig.password}`).toString('base64');
72
+ this.authHeaders['Authorization'] = `Basic ${credentials}`;
73
+ }
74
+ break;
75
+ case 'custom':
76
+ if (this.authConfig.headers) {
77
+ this.authHeaders = { ...this.authHeaders, ...this.authConfig.headers };
78
+ }
79
+ break;
80
+ }
81
+ }
19
82
  setupAgent() {
83
+ const agentOptions = {};
84
+ if (this.certificateConfig) {
85
+ if (this.certificateConfig.cert) {
86
+ agentOptions.cert = fs.readFileSync(this.certificateConfig.cert);
87
+ }
88
+ if (this.certificateConfig.key) {
89
+ agentOptions.key = fs.readFileSync(this.certificateConfig.key);
90
+ }
91
+ if (this.certificateConfig.ca) {
92
+ agentOptions.ca = fs.readFileSync(this.certificateConfig.ca);
93
+ }
94
+ if (this.certificateConfig.passphrase) {
95
+ agentOptions.passphrase = this.certificateConfig.passphrase;
96
+ }
97
+ if (this.certificateConfig.rejectUnauthorized !== undefined) {
98
+ agentOptions.rejectUnauthorized = this.certificateConfig.rejectUnauthorized;
99
+ }
100
+ }
20
101
  if (!this.proxyConfig) {
102
+ if (Object.keys(agentOptions).length > 0) {
103
+ const isSecure = this.url.startsWith('wss://');
104
+ if (isSecure) {
105
+ this.agent = new https_proxy_agent_1.HttpsProxyAgent('https://dummy', agentOptions);
106
+ }
107
+ }
21
108
  return;
22
109
  }
23
110
  const proxyAuth = this.proxyConfig.auth
@@ -26,16 +113,16 @@ class WebSocketTransport extends base_1.Transport {
26
113
  const proxyProtocol = this.proxyConfig.protocol || 'http';
27
114
  if (proxyProtocol === 'socks' || proxyProtocol === 'socks5') {
28
115
  const proxyUrl = `socks5://${proxyAuth}${this.proxyConfig.host}:${this.proxyConfig.port}`;
29
- this.agent = new socks_proxy_agent_1.SocksProxyAgent(proxyUrl);
116
+ this.agent = new socks_proxy_agent_1.SocksProxyAgent(proxyUrl, agentOptions);
30
117
  }
31
118
  else {
32
119
  const proxyUrl = `${proxyProtocol}://${proxyAuth}${this.proxyConfig.host}:${this.proxyConfig.port}`;
33
120
  const isSecure = this.url.startsWith('wss://');
34
121
  if (isSecure) {
35
- this.agent = new https_proxy_agent_1.HttpsProxyAgent(proxyUrl);
122
+ this.agent = new https_proxy_agent_1.HttpsProxyAgent(proxyUrl, agentOptions);
36
123
  }
37
124
  else {
38
- this.agent = new http_proxy_agent_1.HttpProxyAgent(proxyUrl);
125
+ this.agent = new http_proxy_agent_1.HttpProxyAgent(proxyUrl, agentOptions);
39
126
  }
40
127
  }
41
128
  }
@@ -45,6 +132,10 @@ class WebSocketTransport extends base_1.Transport {
45
132
  if (this.agent) {
46
133
  options.agent = this.agent;
47
134
  }
135
+ const allHeaders = { ...this.customHeaders, ...this.authHeaders };
136
+ if (Object.keys(allHeaders).length > 0) {
137
+ options.headers = allHeaders;
138
+ }
48
139
  this.ws = new ws_1.default(this.url, options);
49
140
  this.ws.on('open', () => {
50
141
  this.emit('connected');
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -67,6 +67,21 @@ export interface MCPInitializeResult {
67
67
  serverInfo: MCPImplementation;
68
68
  }
69
69
  export type TransportType = 'stdio' | 'http' | 'https' | 'ws' | 'wss';
70
+ export type AuthType = 'bearer' | 'basic' | 'custom';
71
+ export interface AuthConfig {
72
+ type: AuthType;
73
+ token?: string;
74
+ username?: string;
75
+ password?: string;
76
+ headers?: Record<string, string>;
77
+ }
78
+ export interface CertificateConfig {
79
+ cert?: string;
80
+ key?: string;
81
+ ca?: string;
82
+ passphrase?: string;
83
+ rejectUnauthorized?: boolean;
84
+ }
70
85
  export interface TransportConfig {
71
86
  type: TransportType;
72
87
  url?: string;
@@ -74,6 +89,9 @@ export interface TransportConfig {
74
89
  args?: string[];
75
90
  env?: Record<string, string>;
76
91
  proxy?: ProxyConfig;
92
+ auth?: AuthConfig;
93
+ certificate?: CertificateConfig;
94
+ headers?: Record<string, string>;
77
95
  }
78
96
  export interface ProxyConfig {
79
97
  host: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/ui/tui.d.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import { MCPClient } from '../mcp-client';
2
+ import { TransportConfig } from '../types';
2
3
  export declare class TUI {
3
4
  private screen;
4
5
  private layout;
5
6
  private currentView;
6
7
  private client?;
8
+ private currentConfig?;
7
9
  private trafficLines;
8
10
  private trafficPairs;
9
11
  private activePanel;
@@ -14,7 +16,7 @@ export declare class TUI {
14
16
  private showSplashScreen;
15
17
  private createLayout;
16
18
  private setupKeyBindings;
17
- setClient(client: MCPClient): void;
19
+ setClient(client: MCPClient, config?: TransportConfig): void;
18
20
  private updatePanelHighlight;
19
21
  private showTools;
20
22
  private showResources;
@@ -39,5 +41,10 @@ export declare class TUI {
39
41
  private formatXML;
40
42
  private formatForDisplay;
41
43
  private showMessage;
44
+ private saveConnectionConfig;
45
+ private getSavedConnections;
46
+ private getConnectionDisplayName;
47
+ private showSavedConnections;
48
+ private switchConnection;
42
49
  }
43
50
  //# sourceMappingURL=tui.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/ui/tui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,qBAAa,GAAG;IACd,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,MAAM,CAMZ;IAEF,OAAO,CAAC,WAAW,CAA0D;IAC7E,OAAO,CAAC,MAAM,CAAC,CAAY;IAC3B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,YAAY,CAAoE;IACxF,OAAO,CAAC,WAAW,CAA6C;IAChE,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,mBAAmB,CAAgF;IAC3G,OAAO,CAAC,cAAc,CAAS;;IAY/B,OAAO,CAAC,gBAAgB;IA6CxB,OAAO,CAAC,YAAY;IAkIpB,OAAO,CAAC,gBAAgB;IA6ExB,SAAS,CAAC,MAAM,EAAE,SAAS;IA+F3B,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,cAAc;IAmEtB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,cAAc;IAQtB,MAAM;IAWA,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YA2B9B,mBAAmB;YAsCnB,WAAW;YA8BX,YAAY;YA2BZ,SAAS;YAqBT,iBAAiB;IAyE/B,OAAO,CAAC,SAAS;IAiCjB,OAAO,CAAC,gBAAgB;IA4CxB,OAAO,CAAC,WAAW;CAuEpB"}
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/ui/tui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAmC,eAAe,EAAE,MAAM,UAAU,CAAC;AAI5E,qBAAa,GAAG;IACd,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,MAAM,CAMZ;IAEF,OAAO,CAAC,WAAW,CAA0D;IAC7E,OAAO,CAAC,MAAM,CAAC,CAAY;IAC3B,OAAO,CAAC,aAAa,CAAC,CAAkB;IACxC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,YAAY,CAAoE;IACxF,OAAO,CAAC,WAAW,CAA6C;IAChE,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,mBAAmB,CAAgF;IAC3G,OAAO,CAAC,cAAc,CAAS;;IAY/B,OAAO,CAAC,gBAAgB;IA6CxB,OAAO,CAAC,YAAY;IAkIpB,OAAO,CAAC,gBAAgB;IAkFxB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,eAAe;IAwGrD,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,cAAc;IAmEtB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,cAAc;IAQtB,MAAM;IAWA,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YA2B9B,mBAAmB;YAsCnB,WAAW;YA8BX,YAAY;YA2BZ,SAAS;YAqBT,iBAAiB;IAyE/B,OAAO,CAAC,SAAS;IAiCjB,OAAO,CAAC,gBAAgB;IA4CxB,OAAO,CAAC,WAAW;IAwEnB,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,mBAAmB;IA0C3B,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,oBAAoB;YA4Dd,gBAAgB;CAqC/B"}
package/dist/ui/tui.js CHANGED
@@ -1,10 +1,46 @@
1
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
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
39
  exports.TUI = void 0;
7
40
  const blessed_1 = __importDefault(require("blessed"));
41
+ const mcp_client_1 = require("../mcp-client");
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
8
44
  class TUI {
9
45
  constructor() {
10
46
  this.currentView = 'tools';
@@ -239,6 +275,10 @@ class TUI {
239
275
  this.layout.traffic.focus();
240
276
  this.screen.render();
241
277
  });
278
+ // F6 - Show saved connections
279
+ this.screen.key(['f6'], () => {
280
+ this.showSavedConnections();
281
+ });
242
282
  // Handle selection in main panel
243
283
  this.layout.main.key(['enter'], async () => {
244
284
  await this.handleMainSelection();
@@ -253,14 +293,21 @@ class TUI {
253
293
  }
254
294
  });
255
295
  }
256
- setClient(client) {
296
+ setClient(client, config) {
257
297
  this.client = client;
298
+ if (config) {
299
+ this.currentConfig = config;
300
+ }
258
301
  // Set up event handlers
259
302
  client.on('connected', (result) => {
260
303
  const serverName = result.serverInfo?.name || 'Unknown';
261
304
  const serverVersion = result.serverInfo?.version || '?';
305
+ // Save connection config on successful connection
306
+ if (this.currentConfig) {
307
+ this.saveConnectionConfig(this.currentConfig, serverName);
308
+ }
262
309
  this.layout.status.setContent(`{green-fg}Connected{/green-fg} to ${this.escapeBlessedTags(serverName)} v${serverVersion} | ` +
263
- `{cyan-fg}F1{/cyan-fg}=Nav {cyan-fg}F2{/cyan-fg}=Content {cyan-fg}F3{/cyan-fg}=Traffic {cyan-fg}F4{/cyan-fg}=Close {cyan-fg}F5{/cyan-fg}=Refresh {cyan-fg}F10{/cyan-fg}=Quit | ` +
310
+ `{cyan-fg}F1{/cyan-fg}=Nav {cyan-fg}F2{/cyan-fg}=Content {cyan-fg}F3{/cyan-fg}=Traffic {cyan-fg}F4{/cyan-fg}=Close {cyan-fg}F5{/cyan-fg}=Refresh {cyan-fg}F6{/cyan-fg}=Connections {cyan-fg}F10{/cyan-fg}=Quit | ` +
264
311
  `{bold}{cyan-fg}IntegSec{/cyan-fg}{/bold} {gray-fg}({green-fg}integsec.com{/green-fg}) - Need pentesting? Contact us!{/gray-fg}`);
265
312
  this.updateCurrentView();
266
313
  this.screen.render();
@@ -867,6 +914,162 @@ class TUI {
867
914
  msg.focus();
868
915
  this.screen.render();
869
916
  }
917
+ saveConnectionConfig(config, serverName) {
918
+ try {
919
+ const cwd = process.cwd();
920
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
921
+ const sanitizedServerName = serverName.replace(/[^a-zA-Z0-9-_]/g, '_').toLowerCase();
922
+ const filename = `${sanitizedServerName}-${timestamp}.mcp-connection.json`;
923
+ const filepath = path.join(cwd, filename);
924
+ const configToSave = {
925
+ ...config,
926
+ _saved: {
927
+ timestamp: new Date().toISOString(),
928
+ serverName: serverName,
929
+ }
930
+ };
931
+ fs.writeFileSync(filepath, JSON.stringify(configToSave, null, 2), 'utf-8');
932
+ this.addTrafficLine(`{green-fg}Connection saved:{/green-fg} ${filename}`);
933
+ this.screen.render();
934
+ }
935
+ catch (error) {
936
+ this.addTrafficLine(`{red-fg}Failed to save connection:{/red-fg} ${error instanceof Error ? error.message : String(error)}`);
937
+ this.screen.render();
938
+ }
939
+ }
940
+ getSavedConnections() {
941
+ const connections = [];
942
+ try {
943
+ const cwd = process.cwd();
944
+ const files = fs.readdirSync(cwd);
945
+ for (const file of files) {
946
+ if (file.endsWith('.mcp-connection.json')) {
947
+ try {
948
+ const filepath = path.join(cwd, file);
949
+ const content = fs.readFileSync(filepath, 'utf-8');
950
+ const config = JSON.parse(content);
951
+ const serverName = config._saved?.serverName || this.getConnectionDisplayName(config);
952
+ const timestamp = config._saved?.timestamp || new Date(fs.statSync(filepath).mtime).toISOString();
953
+ // Remove _saved metadata for the actual config
954
+ const { _saved, ...cleanConfig } = config;
955
+ connections.push({
956
+ filepath,
957
+ config: cleanConfig,
958
+ serverName,
959
+ timestamp,
960
+ });
961
+ }
962
+ catch (error) {
963
+ // Skip invalid files
964
+ continue;
965
+ }
966
+ }
967
+ }
968
+ // Sort by timestamp, most recent first
969
+ connections.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
970
+ }
971
+ catch (error) {
972
+ // If directory read fails, return empty array
973
+ }
974
+ return connections;
975
+ }
976
+ getConnectionDisplayName(config) {
977
+ if (config.type === 'stdio' && config.command) {
978
+ return `${config.command} ${(config.args || []).slice(0, 2).join(' ')}`;
979
+ }
980
+ else if (config.url) {
981
+ try {
982
+ const url = new URL(config.url);
983
+ return `${config.type}://${url.hostname}${url.port ? ':' + url.port : ''}`;
984
+ }
985
+ catch {
986
+ return config.url;
987
+ }
988
+ }
989
+ return `${config.type} connection`;
990
+ }
991
+ showSavedConnections() {
992
+ const connections = this.getSavedConnections();
993
+ if (connections.length === 0) {
994
+ this.showMessage('No Saved Connections', '{yellow-fg}No saved connections found in current directory.{/yellow-fg}\n\n' +
995
+ 'Connections are automatically saved when you successfully connect to a server.\n' +
996
+ 'Saved files use the extension: {cyan-fg}.mcp-connection.json{/cyan-fg}', 'yellow');
997
+ return;
998
+ }
999
+ const items = connections.map((conn, index) => {
1000
+ const date = new Date(conn.timestamp);
1001
+ const dateStr = date.toLocaleString();
1002
+ return `${index + 1}. ${conn.serverName} (${dateStr})`;
1003
+ });
1004
+ const list = blessed_1.default.list({
1005
+ parent: this.screen,
1006
+ top: 'center',
1007
+ left: 'center',
1008
+ width: '80%',
1009
+ height: Math.min(connections.length + 4, 20),
1010
+ border: {
1011
+ type: 'line',
1012
+ },
1013
+ style: {
1014
+ border: {
1015
+ fg: 'cyan',
1016
+ },
1017
+ selected: {
1018
+ bg: 'blue',
1019
+ },
1020
+ },
1021
+ keys: true,
1022
+ vi: true,
1023
+ items: items,
1024
+ label: ' Saved Connections (F4 to close, Enter to switch) ',
1025
+ });
1026
+ list.on('select', async (item, index) => {
1027
+ const selectedConnection = connections[index];
1028
+ list.destroy();
1029
+ this.screen.render();
1030
+ await this.switchConnection(selectedConnection.config, selectedConnection.filepath);
1031
+ });
1032
+ list.key(['escape', 'f4'], () => {
1033
+ list.destroy();
1034
+ this.screen.render();
1035
+ });
1036
+ list.focus();
1037
+ this.screen.render();
1038
+ }
1039
+ async switchConnection(config, filepath) {
1040
+ try {
1041
+ // Show loading message
1042
+ this.layout.status.setContent('{yellow-fg}Switching connection...{/yellow-fg}');
1043
+ this.screen.render();
1044
+ // Disconnect current client if exists
1045
+ if (this.client) {
1046
+ try {
1047
+ await this.client.disconnect();
1048
+ }
1049
+ catch {
1050
+ // Ignore disconnect errors
1051
+ }
1052
+ }
1053
+ // Create new client with the saved config
1054
+ const newClient = new mcp_client_1.MCPClient(config);
1055
+ this.setClient(newClient, config);
1056
+ // Clear current state
1057
+ this.trafficLines = [];
1058
+ this.trafficPairs = [];
1059
+ this.layout.traffic.setContent('');
1060
+ this.layout.main.setItems([]);
1061
+ this.currentView = 'tools';
1062
+ // Connect
1063
+ await newClient.connect();
1064
+ this.addTrafficLine(`{green-fg}Switched to connection:{/green-fg} ${path.basename(filepath)}`);
1065
+ this.screen.render();
1066
+ }
1067
+ catch (error) {
1068
+ this.layout.status.setContent(`{red-fg}Failed to switch connection:{/red-fg} ${error instanceof Error ? error.message : String(error)}`);
1069
+ this.addTrafficLine(`{red-fg}Connection switch failed:{/red-fg} ${error instanceof Error ? error.message : String(error)}`);
1070
+ this.screen.render();
1071
+ }
1072
+ }
870
1073
  }
871
1074
  exports.TUI = TUI;
872
1075
  //# sourceMappingURL=tui.js.map