@dotsetlabs/tollgate 0.1.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 (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +885 -0
  3. package/dist/analyzers/filesystem.d.ts +26 -0
  4. package/dist/analyzers/filesystem.d.ts.map +1 -0
  5. package/dist/analyzers/filesystem.js +284 -0
  6. package/dist/analyzers/filesystem.js.map +1 -0
  7. package/dist/analyzers/http.d.ts +90 -0
  8. package/dist/analyzers/http.d.ts.map +1 -0
  9. package/dist/analyzers/http.js +433 -0
  10. package/dist/analyzers/http.js.map +1 -0
  11. package/dist/analyzers/index.d.ts +101 -0
  12. package/dist/analyzers/index.d.ts.map +1 -0
  13. package/dist/analyzers/index.js +342 -0
  14. package/dist/analyzers/index.js.map +1 -0
  15. package/dist/analyzers/loader.d.ts +114 -0
  16. package/dist/analyzers/loader.d.ts.map +1 -0
  17. package/dist/analyzers/loader.js +184 -0
  18. package/dist/analyzers/loader.js.map +1 -0
  19. package/dist/analyzers/prompt-injection.d.ts +95 -0
  20. package/dist/analyzers/prompt-injection.d.ts.map +1 -0
  21. package/dist/analyzers/prompt-injection.js +725 -0
  22. package/dist/analyzers/prompt-injection.js.map +1 -0
  23. package/dist/analyzers/sdk.d.ts +230 -0
  24. package/dist/analyzers/sdk.d.ts.map +1 -0
  25. package/dist/analyzers/sdk.js +283 -0
  26. package/dist/analyzers/sdk.js.map +1 -0
  27. package/dist/analyzers/shell.d.ts +20 -0
  28. package/dist/analyzers/shell.d.ts.map +1 -0
  29. package/dist/analyzers/shell.js +297 -0
  30. package/dist/analyzers/shell.js.map +1 -0
  31. package/dist/analyzers/sql.d.ts +37 -0
  32. package/dist/analyzers/sql.d.ts.map +1 -0
  33. package/dist/analyzers/sql.js +455 -0
  34. package/dist/analyzers/sql.js.map +1 -0
  35. package/dist/analyzers/types.d.ts +117 -0
  36. package/dist/analyzers/types.d.ts.map +1 -0
  37. package/dist/analyzers/types.js +46 -0
  38. package/dist/analyzers/types.js.map +1 -0
  39. package/dist/approval/interactive.d.ts +72 -0
  40. package/dist/approval/interactive.d.ts.map +1 -0
  41. package/dist/approval/interactive.js +550 -0
  42. package/dist/approval/interactive.js.map +1 -0
  43. package/dist/approval/terminal.d.ts +59 -0
  44. package/dist/approval/terminal.d.ts.map +1 -0
  45. package/dist/approval/terminal.js +238 -0
  46. package/dist/approval/terminal.js.map +1 -0
  47. package/dist/approval/types.d.ts +66 -0
  48. package/dist/approval/types.d.ts.map +1 -0
  49. package/dist/approval/types.js +2 -0
  50. package/dist/approval/types.js.map +1 -0
  51. package/dist/audit/exporter.d.ts +138 -0
  52. package/dist/audit/exporter.d.ts.map +1 -0
  53. package/dist/audit/exporter.js +366 -0
  54. package/dist/audit/exporter.js.map +1 -0
  55. package/dist/audit/logger.d.ts +156 -0
  56. package/dist/audit/logger.d.ts.map +1 -0
  57. package/dist/audit/logger.js +406 -0
  58. package/dist/audit/logger.js.map +1 -0
  59. package/dist/audit/redaction.d.ts +110 -0
  60. package/dist/audit/redaction.d.ts.map +1 -0
  61. package/dist/audit/redaction.js +307 -0
  62. package/dist/audit/redaction.js.map +1 -0
  63. package/dist/audit/schema.d.ts +76 -0
  64. package/dist/audit/schema.d.ts.map +1 -0
  65. package/dist/audit/schema.js +122 -0
  66. package/dist/audit/schema.js.map +1 -0
  67. package/dist/cli/commands/doctor.d.ts +34 -0
  68. package/dist/cli/commands/doctor.d.ts.map +1 -0
  69. package/dist/cli/commands/doctor.js +431 -0
  70. package/dist/cli/commands/doctor.js.map +1 -0
  71. package/dist/cli/commands/export.d.ts +18 -0
  72. package/dist/cli/commands/export.d.ts.map +1 -0
  73. package/dist/cli/commands/export.js +63 -0
  74. package/dist/cli/commands/export.js.map +1 -0
  75. package/dist/cli/commands/init.d.ts +12 -0
  76. package/dist/cli/commands/init.d.ts.map +1 -0
  77. package/dist/cli/commands/init.js +102 -0
  78. package/dist/cli/commands/init.js.map +1 -0
  79. package/dist/cli/commands/logs.d.ts +11 -0
  80. package/dist/cli/commands/logs.d.ts.map +1 -0
  81. package/dist/cli/commands/logs.js +60 -0
  82. package/dist/cli/commands/logs.js.map +1 -0
  83. package/dist/cli/commands/scan.d.ts +29 -0
  84. package/dist/cli/commands/scan.d.ts.map +1 -0
  85. package/dist/cli/commands/scan.js +251 -0
  86. package/dist/cli/commands/scan.js.map +1 -0
  87. package/dist/cli/commands/serve.d.ts +26 -0
  88. package/dist/cli/commands/serve.d.ts.map +1 -0
  89. package/dist/cli/commands/serve.js +424 -0
  90. package/dist/cli/commands/serve.js.map +1 -0
  91. package/dist/cli/commands/start.d.ts +20 -0
  92. package/dist/cli/commands/start.d.ts.map +1 -0
  93. package/dist/cli/commands/start.js +82 -0
  94. package/dist/cli/commands/start.js.map +1 -0
  95. package/dist/cli/commands/stats.d.ts +10 -0
  96. package/dist/cli/commands/stats.d.ts.map +1 -0
  97. package/dist/cli/commands/stats.js +42 -0
  98. package/dist/cli/commands/stats.js.map +1 -0
  99. package/dist/cli/commands/templates.d.ts +26 -0
  100. package/dist/cli/commands/templates.d.ts.map +1 -0
  101. package/dist/cli/commands/templates.js +221 -0
  102. package/dist/cli/commands/templates.js.map +1 -0
  103. package/dist/cli/commands/validate.d.ts +12 -0
  104. package/dist/cli/commands/validate.d.ts.map +1 -0
  105. package/dist/cli/commands/validate.js +107 -0
  106. package/dist/cli/commands/validate.js.map +1 -0
  107. package/dist/cli/commands/wrap.d.ts +19 -0
  108. package/dist/cli/commands/wrap.d.ts.map +1 -0
  109. package/dist/cli/commands/wrap.js +59 -0
  110. package/dist/cli/commands/wrap.js.map +1 -0
  111. package/dist/cli/index.d.ts +17 -0
  112. package/dist/cli/index.d.ts.map +1 -0
  113. package/dist/cli/index.js +202 -0
  114. package/dist/cli/index.js.map +1 -0
  115. package/dist/cli/ui.d.ts +139 -0
  116. package/dist/cli/ui.d.ts.map +1 -0
  117. package/dist/cli/ui.js +271 -0
  118. package/dist/cli/ui.js.map +1 -0
  119. package/dist/constants.d.ts +33 -0
  120. package/dist/constants.d.ts.map +1 -0
  121. package/dist/constants.js +54 -0
  122. package/dist/constants.js.map +1 -0
  123. package/dist/errors.d.ts +28 -0
  124. package/dist/errors.d.ts.map +1 -0
  125. package/dist/errors.js +37 -0
  126. package/dist/errors.js.map +1 -0
  127. package/dist/index.d.ts +49 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +82 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/orchestrator/index.d.ts +11 -0
  132. package/dist/orchestrator/index.d.ts.map +1 -0
  133. package/dist/orchestrator/index.js +10 -0
  134. package/dist/orchestrator/index.js.map +1 -0
  135. package/dist/orchestrator/manager.d.ts +127 -0
  136. package/dist/orchestrator/manager.d.ts.map +1 -0
  137. package/dist/orchestrator/manager.js +498 -0
  138. package/dist/orchestrator/manager.js.map +1 -0
  139. package/dist/orchestrator/types.d.ts +141 -0
  140. package/dist/orchestrator/types.d.ts.map +1 -0
  141. package/dist/orchestrator/types.js +9 -0
  142. package/dist/orchestrator/types.js.map +1 -0
  143. package/dist/policy/engine.d.ts +55 -0
  144. package/dist/policy/engine.d.ts.map +1 -0
  145. package/dist/policy/engine.js +288 -0
  146. package/dist/policy/engine.js.map +1 -0
  147. package/dist/policy/natural-language.d.ts +141 -0
  148. package/dist/policy/natural-language.d.ts.map +1 -0
  149. package/dist/policy/natural-language.js +552 -0
  150. package/dist/policy/natural-language.js.map +1 -0
  151. package/dist/policy/parser.d.ts +141 -0
  152. package/dist/policy/parser.d.ts.map +1 -0
  153. package/dist/policy/parser.js +314 -0
  154. package/dist/policy/parser.js.map +1 -0
  155. package/dist/policy/types.d.ts +428 -0
  156. package/dist/policy/types.d.ts.map +1 -0
  157. package/dist/policy/types.js +32 -0
  158. package/dist/policy/types.js.map +1 -0
  159. package/dist/policy/validator.d.ts +72 -0
  160. package/dist/policy/validator.d.ts.map +1 -0
  161. package/dist/policy/validator.js +453 -0
  162. package/dist/policy/validator.js.map +1 -0
  163. package/dist/proxy/bridge.d.ts +84 -0
  164. package/dist/proxy/bridge.d.ts.map +1 -0
  165. package/dist/proxy/bridge.js +217 -0
  166. package/dist/proxy/bridge.js.map +1 -0
  167. package/dist/proxy/client.d.ts +130 -0
  168. package/dist/proxy/client.d.ts.map +1 -0
  169. package/dist/proxy/client.js +290 -0
  170. package/dist/proxy/client.js.map +1 -0
  171. package/dist/proxy/server.d.ts +111 -0
  172. package/dist/proxy/server.d.ts.map +1 -0
  173. package/dist/proxy/server.js +444 -0
  174. package/dist/proxy/server.js.map +1 -0
  175. package/dist/scanner.d.ts +91 -0
  176. package/dist/scanner.d.ts.map +1 -0
  177. package/dist/scanner.js +373 -0
  178. package/dist/scanner.js.map +1 -0
  179. package/dist/session/index.d.ts +32 -0
  180. package/dist/session/index.d.ts.map +1 -0
  181. package/dist/session/index.js +31 -0
  182. package/dist/session/index.js.map +1 -0
  183. package/dist/session/manager.d.ts +166 -0
  184. package/dist/session/manager.d.ts.map +1 -0
  185. package/dist/session/manager.js +454 -0
  186. package/dist/session/manager.js.map +1 -0
  187. package/dist/session/sqlite-store.d.ts +54 -0
  188. package/dist/session/sqlite-store.d.ts.map +1 -0
  189. package/dist/session/sqlite-store.js +209 -0
  190. package/dist/session/sqlite-store.js.map +1 -0
  191. package/dist/session/types.d.ts +179 -0
  192. package/dist/session/types.d.ts.map +1 -0
  193. package/dist/session/types.js +38 -0
  194. package/dist/session/types.js.map +1 -0
  195. package/dist/templates.d.ts +64 -0
  196. package/dist/templates.d.ts.map +1 -0
  197. package/dist/templates.js +451 -0
  198. package/dist/templates.js.map +1 -0
  199. package/dist/utils/config.d.ts +57 -0
  200. package/dist/utils/config.d.ts.map +1 -0
  201. package/dist/utils/config.js +104 -0
  202. package/dist/utils/config.js.map +1 -0
  203. package/dist/utils/errors.d.ts +18 -0
  204. package/dist/utils/errors.d.ts.map +1 -0
  205. package/dist/utils/errors.js +35 -0
  206. package/dist/utils/errors.js.map +1 -0
  207. package/dist/utils/logger.d.ts +144 -0
  208. package/dist/utils/logger.d.ts.map +1 -0
  209. package/dist/utils/logger.js +300 -0
  210. package/dist/utils/logger.js.map +1 -0
  211. package/dist/wizard.d.ts +68 -0
  212. package/dist/wizard.d.ts.map +1 -0
  213. package/dist/wizard.js +395 -0
  214. package/dist/wizard.js.map +1 -0
  215. package/package.json +99 -0
@@ -0,0 +1,424 @@
1
+ /**
2
+ * Tollgate Serve Command
3
+ *
4
+ * Starts the Tollgate orchestrator to manage multiple MCP servers.
5
+ * Provides an interactive CLI for controlling servers.
6
+ */
7
+ import chalk from 'chalk';
8
+ import * as readline from 'node:readline';
9
+ import { loadConfig, Orchestrator, ConfigError, TollgateError, } from '../../index.js';
10
+ import { createLogger } from '../../utils/logger.js';
11
+ const serveLogger = createLogger('serve');
12
+ /**
13
+ * Format uptime in human-readable format.
14
+ */
15
+ function formatUptime(seconds) {
16
+ if (seconds < 60)
17
+ return `${seconds}s`;
18
+ if (seconds < 3600)
19
+ return `${Math.floor(seconds / 60)}m ${seconds % 60}s`;
20
+ const hours = Math.floor(seconds / 3600);
21
+ const mins = Math.floor((seconds % 3600) / 60);
22
+ return `${hours}h ${mins}m`;
23
+ }
24
+ /**
25
+ * Format server status with color.
26
+ */
27
+ function formatStatus(status) {
28
+ switch (status) {
29
+ case 'running':
30
+ return chalk.green('running');
31
+ case 'stopped':
32
+ return chalk.gray('stopped');
33
+ case 'starting':
34
+ return chalk.yellow('starting');
35
+ case 'stopping':
36
+ return chalk.yellow('stopping');
37
+ case 'error':
38
+ return chalk.red('error');
39
+ case 'unhealthy':
40
+ return chalk.red('unhealthy');
41
+ default:
42
+ return chalk.gray(status);
43
+ }
44
+ }
45
+ /**
46
+ * Format health status with color.
47
+ */
48
+ function formatHealth(health) {
49
+ switch (health) {
50
+ case 'healthy':
51
+ return chalk.green('healthy');
52
+ case 'unhealthy':
53
+ return chalk.red('unhealthy');
54
+ default:
55
+ return chalk.gray('unknown');
56
+ }
57
+ }
58
+ /**
59
+ * Print server table.
60
+ */
61
+ function printServerTable(servers) {
62
+ console.log();
63
+ console.log(chalk.bold(' # Server Status Health Uptime Calls'));
64
+ console.log(chalk.dim(' ─'.repeat(40)));
65
+ servers.forEach((server, index) => {
66
+ const uptime = server.startedAt
67
+ ? formatUptime(Math.floor((Date.now() - server.startedAt.getTime()) / 1000))
68
+ : '-';
69
+ console.log(` ${chalk.cyan(String(index + 1).padStart(2))} ` +
70
+ `${server.name.padEnd(20)} ` +
71
+ `${formatStatus(server.status).padEnd(18)} ` +
72
+ `${formatHealth(server.healthStatus).padEnd(18)} ` +
73
+ `${uptime.padEnd(10)} ` +
74
+ `${server.toolCallCount}`);
75
+ });
76
+ console.log();
77
+ }
78
+ /**
79
+ * Print orchestrator statistics.
80
+ */
81
+ function printStats(stats) {
82
+ console.log();
83
+ console.log(chalk.bold('Orchestrator Statistics'));
84
+ console.log(chalk.dim('─'.repeat(40)));
85
+ console.log(` Total Servers: ${stats.totalServers}`);
86
+ console.log(` Running: ${chalk.green(stats.runningServers)}`);
87
+ console.log(` Stopped: ${chalk.gray(stats.stoppedServers)}`);
88
+ console.log(` Errors: ${stats.errorServers > 0 ? chalk.red(stats.errorServers) : stats.errorServers}`);
89
+ console.log(` Uptime: ${formatUptime(stats.uptime)}`);
90
+ console.log();
91
+ console.log(chalk.bold('Request Statistics'));
92
+ console.log(chalk.dim('─'.repeat(40)));
93
+ console.log(` Total Calls: ${stats.totalToolCalls}`);
94
+ console.log(` Denied: ${stats.totalDenied}`);
95
+ console.log(` Prompted: ${stats.totalPrompted}`);
96
+ console.log();
97
+ }
98
+ /**
99
+ * Print help for interactive commands.
100
+ */
101
+ function printHelp() {
102
+ console.log();
103
+ console.log(chalk.bold('Available Commands:'));
104
+ console.log(chalk.dim('─'.repeat(40)));
105
+ console.log(` ${chalk.cyan('status')} / ${chalk.cyan('ls')} Show all servers`);
106
+ console.log(` ${chalk.cyan('start <n|name>')} Start a server`);
107
+ console.log(` ${chalk.cyan('stop <n|name>')} Stop a server`);
108
+ console.log(` ${chalk.cyan('restart <n|name>')} Restart a server`);
109
+ console.log(` ${chalk.cyan('start-all')} Start all servers`);
110
+ console.log(` ${chalk.cyan('stop-all')} Stop all servers`);
111
+ console.log(` ${chalk.cyan('stats')} Show statistics`);
112
+ console.log(` ${chalk.cyan('logs <n|name>')} Show server logs`);
113
+ console.log(` ${chalk.cyan('help')} Show this help`);
114
+ console.log(` ${chalk.cyan('quit')} / ${chalk.cyan('exit')} Exit orchestrator`);
115
+ console.log();
116
+ }
117
+ /**
118
+ * Interactive CLI session.
119
+ */
120
+ async function runInteractiveSession(orchestrator) {
121
+ const rl = readline.createInterface({
122
+ input: process.stdin,
123
+ output: process.stdout,
124
+ prompt: chalk.cyan('tollgate> '),
125
+ });
126
+ const servers = orchestrator.getAllServers();
127
+ const serverNames = orchestrator.getServerNames();
128
+ /**
129
+ * Resolve server reference (number or name) to server name.
130
+ */
131
+ function resolveServer(ref) {
132
+ // Try as number first
133
+ const num = parseInt(ref, 10);
134
+ if (!isNaN(num) && num >= 1 && num <= servers.length) {
135
+ return serverNames[num - 1] ?? null;
136
+ }
137
+ // Try as name
138
+ if (serverNames.includes(ref)) {
139
+ return ref;
140
+ }
141
+ // Try partial match
142
+ const matches = serverNames.filter(n => n.toLowerCase().includes(ref.toLowerCase()));
143
+ if (matches.length === 1) {
144
+ return matches[0];
145
+ }
146
+ return null;
147
+ }
148
+ /**
149
+ * Process a command.
150
+ */
151
+ async function processCommand(line) {
152
+ const parts = line.trim().split(/\s+/);
153
+ const cmd = parts[0]?.toLowerCase();
154
+ const arg = parts[1];
155
+ switch (cmd) {
156
+ case '':
157
+ return true;
158
+ case 'status':
159
+ case 'ls':
160
+ case 'list':
161
+ printServerTable(orchestrator.getAllServers());
162
+ return true;
163
+ case 'start': {
164
+ if (!arg) {
165
+ console.log(chalk.red('Usage: start <number|name>'));
166
+ return true;
167
+ }
168
+ const name = resolveServer(arg);
169
+ if (!name) {
170
+ console.log(chalk.red(`Server not found: ${arg}`));
171
+ return true;
172
+ }
173
+ console.log(chalk.cyan(`Starting ${name}...`));
174
+ const result = await orchestrator.startServer(name);
175
+ console.log(result.success ? chalk.green(result.message) : chalk.red(result.message));
176
+ return true;
177
+ }
178
+ case 'stop': {
179
+ if (!arg) {
180
+ console.log(chalk.red('Usage: stop <number|name>'));
181
+ return true;
182
+ }
183
+ const name = resolveServer(arg);
184
+ if (!name) {
185
+ console.log(chalk.red(`Server not found: ${arg}`));
186
+ return true;
187
+ }
188
+ console.log(chalk.cyan(`Stopping ${name}...`));
189
+ const result = await orchestrator.stopServer(name);
190
+ console.log(result.success ? chalk.green(result.message) : chalk.red(result.message));
191
+ return true;
192
+ }
193
+ case 'restart': {
194
+ if (!arg) {
195
+ console.log(chalk.red('Usage: restart <number|name>'));
196
+ return true;
197
+ }
198
+ const name = resolveServer(arg);
199
+ if (!name) {
200
+ console.log(chalk.red(`Server not found: ${arg}`));
201
+ return true;
202
+ }
203
+ console.log(chalk.cyan(`Restarting ${name}...`));
204
+ const result = await orchestrator.restartServer(name);
205
+ console.log(result.success ? chalk.green(result.message) : chalk.red(result.message));
206
+ return true;
207
+ }
208
+ case 'start-all':
209
+ case 'startall': {
210
+ console.log(chalk.cyan('Starting all servers...'));
211
+ const results = await orchestrator.startAll();
212
+ for (const result of results) {
213
+ const serverName = result.data?.server ?? 'unknown';
214
+ console.log(result.success
215
+ ? chalk.green(` ${serverName}: ${result.message}`)
216
+ : chalk.red(` ${serverName}: ${result.message}`));
217
+ }
218
+ return true;
219
+ }
220
+ case 'stop-all':
221
+ case 'stopall': {
222
+ console.log(chalk.cyan('Stopping all servers...'));
223
+ const results = await orchestrator.stopAll();
224
+ for (const result of results) {
225
+ const serverName = result.data?.server ?? 'unknown';
226
+ console.log(result.success
227
+ ? chalk.green(` ${serverName}: ${result.message}`)
228
+ : chalk.red(` ${serverName}: ${result.message}`));
229
+ }
230
+ return true;
231
+ }
232
+ case 'stats':
233
+ case 'statistics':
234
+ printStats(orchestrator.getStats());
235
+ return true;
236
+ case 'logs': {
237
+ if (!arg) {
238
+ console.log(chalk.red('Usage: logs <number|name>'));
239
+ return true;
240
+ }
241
+ const name = resolveServer(arg);
242
+ if (!name) {
243
+ console.log(chalk.red(`Server not found: ${arg}`));
244
+ return true;
245
+ }
246
+ const result = await orchestrator.getServerLogs(name);
247
+ if (!result.success) {
248
+ console.log(chalk.red(result.message));
249
+ return true;
250
+ }
251
+ const logs = result.data;
252
+ if (logs.length === 0) {
253
+ console.log(chalk.gray('No logs available'));
254
+ return true;
255
+ }
256
+ console.log();
257
+ console.log(chalk.bold(`Recent logs for ${name}:`));
258
+ for (const log of logs) {
259
+ console.log(` ${chalk.dim(log.timestamp)} ${log.tool} - ${log.action}`);
260
+ }
261
+ console.log();
262
+ return true;
263
+ }
264
+ case 'help':
265
+ case '?':
266
+ printHelp();
267
+ return true;
268
+ case 'quit':
269
+ case 'exit':
270
+ case 'q':
271
+ return false;
272
+ default:
273
+ console.log(chalk.red(`Unknown command: ${cmd}. Type 'help' for available commands.`));
274
+ return true;
275
+ }
276
+ }
277
+ // Print initial status
278
+ console.log();
279
+ console.log(chalk.bold.cyan('Tollgate Multi-Server Orchestrator'));
280
+ console.log(chalk.dim('Type "help" for available commands, "quit" to exit'));
281
+ printServerTable(orchestrator.getAllServers());
282
+ // Set up event logging
283
+ orchestrator.on((event) => {
284
+ switch (event.type) {
285
+ case 'server:started':
286
+ console.log(chalk.green(`\n[Event] Server ${event.server} started`));
287
+ break;
288
+ case 'server:stopped':
289
+ console.log(chalk.yellow(`\n[Event] Server ${event.server} stopped`));
290
+ break;
291
+ case 'server:error':
292
+ console.log(chalk.red(`\n[Event] Server ${event.server} error: ${event.error}`));
293
+ break;
294
+ case 'server:health':
295
+ if (event.status === 'unhealthy') {
296
+ console.log(chalk.red(`\n[Event] Server ${event.server} became unhealthy`));
297
+ }
298
+ break;
299
+ }
300
+ rl.prompt();
301
+ });
302
+ // Interactive loop
303
+ rl.prompt();
304
+ for await (const line of rl) {
305
+ const shouldContinue = await processCommand(line);
306
+ if (!shouldContinue) {
307
+ break;
308
+ }
309
+ rl.prompt();
310
+ }
311
+ rl.close();
312
+ }
313
+ /**
314
+ * Start the multi-server orchestrator.
315
+ */
316
+ export async function serve(options) {
317
+ try {
318
+ const config = await loadConfig(options.config);
319
+ // Merge CLI approval options into config (only if explicitly set, not default)
320
+ // Note: options.approval defaults to 'terminal', so we only override if it's not the default
321
+ if (options.approval && options.approval !== 'terminal') {
322
+ config.approval = {
323
+ ...config.approval,
324
+ method: options.approval,
325
+ };
326
+ }
327
+ // Only override port if explicitly set (not default 9848)
328
+ if (options.approvalPort && options.approvalPort !== '9848') {
329
+ config.approval = {
330
+ ...config.approval,
331
+ port: parseInt(options.approvalPort, 10),
332
+ };
333
+ }
334
+ // Merge CLI session options into config
335
+ if (options.persistSessions) {
336
+ config.session = {
337
+ ...config.session,
338
+ persist: true,
339
+ };
340
+ }
341
+ if (options.sessionPath) {
342
+ config.session = {
343
+ ...config.session,
344
+ path: options.sessionPath,
345
+ };
346
+ }
347
+ // Determine which servers to start
348
+ const serverNames = Object.keys(config.servers ?? {});
349
+ if (serverNames.length === 0) {
350
+ console.error(chalk.red('No servers configured in tollgate.yaml'));
351
+ process.exit(1);
352
+ }
353
+ // Determine auto-start servers
354
+ let autoStartServers;
355
+ if (options.all) {
356
+ autoStartServers = serverNames;
357
+ }
358
+ else if (options.servers && options.servers.length > 0) {
359
+ autoStartServers = options.servers;
360
+ }
361
+ if (options.dryRun) {
362
+ serveLogger.warn('DRY RUN MODE - Tool calls will NOT be executed');
363
+ }
364
+ if (options.failureMode) {
365
+ serveLogger.info('Failure mode configured', { mode: options.failureMode });
366
+ }
367
+ if (options.approval === 'interactive') {
368
+ serveLogger.info('Using interactive approval UI');
369
+ }
370
+ if (options.persistSessions) {
371
+ serveLogger.info('Session grants will be persisted to disk');
372
+ }
373
+ serveLogger.info('Starting orchestrator', { serverCount: serverNames.length });
374
+ // Only pass approvalMethod if explicitly set on CLI (not default)
375
+ // This allows config file approval.method to take precedence
376
+ const approvalMethod = options.approval !== 'terminal' ? options.approval : undefined;
377
+ const orchestrator = new Orchestrator({
378
+ config,
379
+ auditPath: options.auditPath,
380
+ approvalTimeout: parseInt(options.timeout, 10),
381
+ approvalMethod,
382
+ approvalPort: options.approvalPort ? parseInt(options.approvalPort, 10) : undefined,
383
+ persistSessions: options.persistSessions,
384
+ sessionPath: options.sessionPath,
385
+ dryRun: options.dryRun,
386
+ failureMode: options.failureMode,
387
+ autoStart: !!autoStartServers,
388
+ autoStartServers,
389
+ });
390
+ await orchestrator.start();
391
+ // Run interactive session or just keep running
392
+ if (options.interactive !== false) {
393
+ await runInteractiveSession(orchestrator);
394
+ await orchestrator.shutdown();
395
+ }
396
+ else {
397
+ // Non-interactive mode - just keep running
398
+ serveLogger.info('Running in non-interactive mode. Press Ctrl+C to stop.');
399
+ await new Promise(() => { }); // Never resolves - runs until signal
400
+ }
401
+ }
402
+ catch (error) {
403
+ handleError(error);
404
+ }
405
+ }
406
+ function handleError(error) {
407
+ if (error instanceof ConfigError) {
408
+ console.error(chalk.red(`Configuration Error: ${error.message}`));
409
+ if (error.details) {
410
+ console.error(chalk.dim(JSON.stringify(error.details, null, 2)));
411
+ }
412
+ }
413
+ else if (error instanceof TollgateError) {
414
+ console.error(chalk.red(`Error [${error.code}]: ${error.message}`));
415
+ }
416
+ else if (error instanceof Error) {
417
+ console.error(chalk.red(`Error: ${error.message}`));
418
+ }
419
+ else {
420
+ console.error(chalk.red('An unknown error occurred'));
421
+ }
422
+ process.exit(1);
423
+ }
424
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Tollgate Start Command
3
+ *
4
+ * Starts the Tollgate proxy for a configured MCP server.
5
+ */
6
+ import { type FailureMode } from '../../index.js';
7
+ export interface StartOptions {
8
+ server: string;
9
+ config?: string;
10
+ auditPath?: string;
11
+ timeout: string;
12
+ approval?: 'terminal' | 'interactive';
13
+ approvalPort?: string;
14
+ persistSessions?: boolean;
15
+ sessionPath?: string;
16
+ dryRun?: boolean;
17
+ failureMode?: FailureMode;
18
+ }
19
+ export declare function startProxy(options: StartOptions): Promise<void>;
20
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAKH,KAAK,WAAW,EACnB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DrE"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Tollgate Start Command
3
+ *
4
+ * Starts the Tollgate proxy for a configured MCP server.
5
+ */
6
+ import chalk from 'chalk';
7
+ import { loadConfig, TollgateBridge, ConfigError, TollgateError, } from '../../index.js';
8
+ export async function startProxy(options) {
9
+ try {
10
+ const config = await loadConfig(options.config);
11
+ // Merge CLI approval options into config (CLI takes precedence)
12
+ if (options.approval) {
13
+ config.approval = {
14
+ ...config.approval,
15
+ method: options.approval,
16
+ };
17
+ }
18
+ if (options.approvalPort) {
19
+ config.approval = {
20
+ ...config.approval,
21
+ port: parseInt(options.approvalPort, 10),
22
+ };
23
+ }
24
+ // Merge CLI session options into config
25
+ if (options.persistSessions) {
26
+ config.session = {
27
+ ...config.session,
28
+ persist: true,
29
+ };
30
+ }
31
+ if (options.sessionPath) {
32
+ config.session = {
33
+ ...config.session,
34
+ path: options.sessionPath,
35
+ };
36
+ }
37
+ if (options.dryRun) {
38
+ console.error(chalk.yellow('[tollgate] DRY RUN MODE - Tool calls will NOT be executed'));
39
+ }
40
+ if (options.failureMode) {
41
+ console.error(chalk.cyan(`[tollgate] Failure mode: ${options.failureMode}`));
42
+ }
43
+ if (options.approval === 'interactive') {
44
+ console.error(chalk.cyan(`[tollgate] Using interactive approval UI`));
45
+ }
46
+ if (options.persistSessions) {
47
+ console.error(chalk.cyan(`[tollgate] Session grants will be persisted to disk`));
48
+ }
49
+ console.error(chalk.cyan(`[tollgate] Starting proxy for server: ${options.server}`));
50
+ const bridge = new TollgateBridge({
51
+ config,
52
+ serverName: options.server,
53
+ auditPath: options.auditPath,
54
+ approvalTimeout: parseInt(options.timeout, 10),
55
+ dryRun: options.dryRun,
56
+ failureMode: options.failureMode,
57
+ });
58
+ await bridge.start();
59
+ }
60
+ catch (error) {
61
+ handleError(error);
62
+ }
63
+ }
64
+ function handleError(error) {
65
+ if (error instanceof ConfigError) {
66
+ console.error(chalk.red(`Configuration Error: ${error.message}`));
67
+ if (error.details) {
68
+ console.error(chalk.dim(JSON.stringify(error.details, null, 2)));
69
+ }
70
+ }
71
+ else if (error instanceof TollgateError) {
72
+ console.error(chalk.red(`Error [${error.code}]: ${error.message}`));
73
+ }
74
+ else if (error instanceof Error) {
75
+ console.error(chalk.red(`Error: ${error.message}`));
76
+ }
77
+ else {
78
+ console.error(chalk.red('An unknown error occurred'));
79
+ }
80
+ process.exit(1);
81
+ }
82
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Tollgate Stats Command
3
+ *
4
+ * Displays audit statistics.
5
+ */
6
+ export interface StatsOptions {
7
+ auditPath?: string;
8
+ }
9
+ export declare function showStats(options: StatsOptions): void;
10
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/stats.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,WAAW,YAAY;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAgBrD"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Tollgate Stats Command
3
+ *
4
+ * Displays audit statistics.
5
+ */
6
+ import chalk from 'chalk';
7
+ import { AuditLogger, ConfigError, TollgateError, } from '../../index.js';
8
+ export function showStats(options) {
9
+ try {
10
+ const logger = new AuditLogger(options.auditPath);
11
+ const stats = logger.getStats();
12
+ console.log(chalk.bold('\nTollgate Statistics:\n'));
13
+ console.log(` Total calls: ${chalk.white(stats.total)}`);
14
+ console.log(` Allowed: ${chalk.green(stats.allowed)}`);
15
+ console.log(` Denied: ${chalk.red(stats.denied)}`);
16
+ console.log(` Prompted: ${chalk.yellow(stats.prompted)}`);
17
+ console.log('');
18
+ logger.close();
19
+ }
20
+ catch (error) {
21
+ handleError(error);
22
+ }
23
+ }
24
+ function handleError(error) {
25
+ if (error instanceof ConfigError) {
26
+ console.error(chalk.red(`Configuration Error: ${error.message}`));
27
+ if (error.details) {
28
+ console.error(chalk.dim(JSON.stringify(error.details, null, 2)));
29
+ }
30
+ }
31
+ else if (error instanceof TollgateError) {
32
+ console.error(chalk.red(`Error [${error.code}]: ${error.message}`));
33
+ }
34
+ else if (error instanceof Error) {
35
+ console.error(chalk.red(`Error: ${error.message}`));
36
+ }
37
+ else {
38
+ console.error(chalk.red('An unknown error occurred'));
39
+ }
40
+ process.exit(1);
41
+ }
42
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/cli/commands/stats.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACH,WAAW,EACX,WAAW,EACX,aAAa,GAChB,MAAM,gBAAgB,CAAC;AAMxB,MAAM,UAAU,SAAS,CAAC,OAAqB;IAC3C,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAEhC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,WAAW,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IAC/B,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;IACL,CAAC;SAAM,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;SAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Tollgate Templates Command
3
+ *
4
+ * List and apply MCP server templates for quick configuration:
5
+ * tollgate templates list - List all available templates
6
+ * tollgate templates show <name> - Show template details
7
+ * tollgate templates apply <name> - Add template to tollgate.yaml
8
+ */
9
+ export interface TemplatesListOptions {
10
+ category?: string;
11
+ search?: string;
12
+ json?: boolean;
13
+ }
14
+ export interface TemplatesShowOptions {
15
+ json?: boolean;
16
+ }
17
+ export interface TemplatesApplyOptions {
18
+ output: string;
19
+ force?: boolean;
20
+ append?: boolean;
21
+ preset?: 'strict' | 'balanced' | 'permissive';
22
+ }
23
+ export declare function listTemplates(options: TemplatesListOptions): void;
24
+ export declare function showTemplate(name: string, options: TemplatesShowOptions): void;
25
+ export declare function applyTemplate(names: string[], options: TemplatesApplyOptions): void;
26
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqBH,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;CACjD;AAMD,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CA+CjE;AAMD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAiE9E;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAgFnF"}