proofscan 0.9.2 → 0.10.1
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/dist/cli.js +6 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts +2 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +4 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/log.d.ts +10 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +126 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/proxy.d.ts +12 -0
- package/dist/commands/proxy.d.ts.map +1 -0
- package/dist/commands/proxy.js +220 -0
- package/dist/commands/proxy.js.map +1 -0
- package/dist/proxy/index.d.ts +10 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +10 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/logger.d.ts +110 -0
- package/dist/proxy/logger.d.ts.map +1 -0
- package/dist/proxy/logger.js +248 -0
- package/dist/proxy/logger.js.map +1 -0
- package/dist/proxy/mcp-server.d.ts +101 -0
- package/dist/proxy/mcp-server.d.ts.map +1 -0
- package/dist/proxy/mcp-server.js +391 -0
- package/dist/proxy/mcp-server.js.map +1 -0
- package/dist/proxy/request-router.d.ts +26 -0
- package/dist/proxy/request-router.d.ts.map +1 -0
- package/dist/proxy/request-router.js +90 -0
- package/dist/proxy/request-router.js.map +1 -0
- package/dist/proxy/runtime-state.d.ts +131 -0
- package/dist/proxy/runtime-state.d.ts.map +1 -0
- package/dist/proxy/runtime-state.js +241 -0
- package/dist/proxy/runtime-state.js.map +1 -0
- package/dist/proxy/tool-aggregator.d.ts +46 -0
- package/dist/proxy/tool-aggregator.d.ts.map +1 -0
- package/dist/proxy/tool-aggregator.js +112 -0
- package/dist/proxy/tool-aggregator.js.map +1 -0
- package/dist/proxy/types.d.ts +117 -0
- package/dist/proxy/types.d.ts.map +1 -0
- package/dist/proxy/types.js +21 -0
- package/dist/proxy/types.js.map +1 -0
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -25,7 +25,7 @@ import { setOutputOptions } from './utils/output.js';
|
|
|
25
25
|
const require = createRequire(import.meta.url);
|
|
26
26
|
const packageJson = require('../package.json');
|
|
27
27
|
const VERSION = packageJson.version;
|
|
28
|
-
import { createConfigCommand, createConnectorsCommand, createScanCommand, createMonitorCommand, createSessionsCommand, createArchiveCommand, createViewCommand, createTreeCommand, createExploreCommand, createStatusCommand, createEventsCommand, createRpcCommand, createSummaryCommand, createPermissionsCommand, createRecordCommand, createDoctorCommand, createShellCommand, createSecretsCommand, createToolCommand, } from './commands/index.js';
|
|
28
|
+
import { createConfigCommand, createConnectorsCommand, createScanCommand, createMonitorCommand, createSessionsCommand, createArchiveCommand, createViewCommand, createTreeCommand, createExploreCommand, createStatusCommand, createEventsCommand, createRpcCommand, createSummaryCommand, createPermissionsCommand, createRecordCommand, createDoctorCommand, createShellCommand, createSecretsCommand, createToolCommand, createProxyCommand, createLogCommand, } from './commands/index.js';
|
|
29
29
|
const program = new Command();
|
|
30
30
|
// Global state for config path
|
|
31
31
|
let globalConfigPath;
|
|
@@ -172,6 +172,10 @@ secretCmd.name('secret').description('Alias for secrets');
|
|
|
172
172
|
program.addCommand(secretCmd);
|
|
173
173
|
// tool (Phase 4.4: CLI tool commands - ls, show, call)
|
|
174
174
|
program.addCommand(createToolCommand(getConfigPath));
|
|
175
|
+
// proxy (Phase 5.0: MCP Proxy server)
|
|
176
|
+
program.addCommand(createProxyCommand(getConfigPath));
|
|
177
|
+
// log (Phase 5.0+: Proxy log viewing)
|
|
178
|
+
program.addCommand(createLogCommand(getConfigPath));
|
|
175
179
|
// ============================================================
|
|
176
180
|
// Default action: pfscan → pfscan view
|
|
177
181
|
// ============================================================
|
|
@@ -183,7 +187,7 @@ function hasHelpFlag() {
|
|
|
183
187
|
const KNOWN_COMMANDS = new Set([
|
|
184
188
|
'view', 'v', 'tree', 't', 'explore', 'e', 'status', 'st',
|
|
185
189
|
'scan', 's', 'archive', 'a', 'config', 'c',
|
|
186
|
-
'connectors', 'connector', 'sessions', 'monitor', 'events', 'rpc', 'summary', 'permissions', 'record', 'doctor', 'shell', 'secrets', 'secret', 'tool', 'help'
|
|
190
|
+
'connectors', 'connector', 'sessions', 'monitor', 'events', 'rpc', 'summary', 'permissions', 'record', 'doctor', 'shell', 'secrets', 'secret', 'tool', 'proxy', 'log', 'help'
|
|
187
191
|
]);
|
|
188
192
|
// Shell-only commands (not available as CLI commands)
|
|
189
193
|
const SHELL_ONLY_COMMANDS = new Set(['send']);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,iCAAiC;AACjC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAG7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAG5B,cAAc,UAAU,CAAC;AAGzB,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,cAAc,CAAC;AAG7B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAG7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAG5B,cAAc,UAAU,CAAC;AAGzB,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,cAAc,CAAC;AAG7B,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,UAAU,CAAC"}
|
package/dist/commands/index.js
CHANGED
|
@@ -24,4 +24,8 @@ export * from './shell.js';
|
|
|
24
24
|
export * from './secrets.js';
|
|
25
25
|
// Phase 4.4: Tool CLI commands
|
|
26
26
|
export * from './tool.js';
|
|
27
|
+
// Phase 5.0: MCP Proxy
|
|
28
|
+
export * from './proxy.js';
|
|
29
|
+
// Phase 5.0+: Log viewing
|
|
30
|
+
export * from './log.js';
|
|
27
31
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAE7B,yBAAyB;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,yBAAyB;AACzB,cAAc,UAAU,CAAC;AAEzB,uBAAuB;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,sBAAsB;AACtB,cAAc,YAAY,CAAC;AAE3B,gCAAgC;AAChC,cAAc,cAAc,CAAC;AAE7B,+BAA+B;AAC/B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAE7B,yBAAyB;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,yBAAyB;AACzB,cAAc,UAAU,CAAC;AAEzB,uBAAuB;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,sBAAsB;AACtB,cAAc,YAAY,CAAC;AAE3B,gCAAgC;AAChC,cAAc,cAAc,CAAC;AAE7B,+BAA+B;AAC/B,cAAc,WAAW,CAAC;AAE1B,uBAAuB;AACvB,cAAc,YAAY,CAAC;AAE3B,0BAA0B;AAC1B,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log Command (Phase 5.0+)
|
|
3
|
+
*
|
|
4
|
+
* pfscan log [options]
|
|
5
|
+
*
|
|
6
|
+
* View proxy logs from the ring buffer.
|
|
7
|
+
*/
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
export declare function createLogCommand(getConfigPath: () => string): Command;
|
|
10
|
+
//# sourceMappingURL=log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,OAAO,CAgHrE"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log Command (Phase 5.0+)
|
|
3
|
+
*
|
|
4
|
+
* pfscan log [options]
|
|
5
|
+
*
|
|
6
|
+
* View proxy logs from the ring buffer.
|
|
7
|
+
*/
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
import { readFile } from 'fs/promises';
|
|
10
|
+
import { existsSync } from 'fs';
|
|
11
|
+
import { join } from 'path';
|
|
12
|
+
import { ConfigManager } from '../config/index.js';
|
|
13
|
+
import { output, getOutputOptions } from '../utils/output.js';
|
|
14
|
+
import { LOG_COLORS } from '../proxy/logger.js';
|
|
15
|
+
export function createLogCommand(getConfigPath) {
|
|
16
|
+
const cmd = new Command('log')
|
|
17
|
+
.description('View proxy logs')
|
|
18
|
+
.option('--tail <n>', 'Number of lines to show', '50')
|
|
19
|
+
.option('--level <level>', 'Filter by minimum level (INFO, WARN, ERROR)')
|
|
20
|
+
.option('--no-color', 'Disable colored output')
|
|
21
|
+
.action(async (options) => {
|
|
22
|
+
const configPath = getConfigPath();
|
|
23
|
+
const manager = new ConfigManager(configPath);
|
|
24
|
+
const configDir = manager.getConfigDir();
|
|
25
|
+
const logPath = join(configDir, 'proxy-logs.jsonl');
|
|
26
|
+
if (!existsSync(logPath)) {
|
|
27
|
+
if (getOutputOptions().json) {
|
|
28
|
+
output({ logs: [], message: 'No log file found' });
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
console.log('No proxy logs found. The proxy may not have run yet.');
|
|
32
|
+
}
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// Parse tail count
|
|
36
|
+
const tailCount = parseInt(options.tail, 10);
|
|
37
|
+
if (isNaN(tailCount) || tailCount < 1) {
|
|
38
|
+
console.error('Invalid --tail value: must be a positive integer');
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
// Parse level filter
|
|
42
|
+
const levelPriority = {
|
|
43
|
+
INFO: 0,
|
|
44
|
+
WARN: 1,
|
|
45
|
+
ERROR: 2,
|
|
46
|
+
};
|
|
47
|
+
let filterPriority = 0;
|
|
48
|
+
if (options.level) {
|
|
49
|
+
const level = options.level.toUpperCase();
|
|
50
|
+
if (!(level in levelPriority)) {
|
|
51
|
+
console.error('Invalid --level: must be INFO, WARN, or ERROR');
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
filterPriority = levelPriority[level];
|
|
55
|
+
}
|
|
56
|
+
// Read and parse log file
|
|
57
|
+
let content;
|
|
58
|
+
try {
|
|
59
|
+
content = await readFile(logPath, 'utf-8');
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
63
|
+
console.error(`Failed to read log file: ${msg}`);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
const lines = content.split('\n').filter((line) => line.trim());
|
|
67
|
+
const entries = [];
|
|
68
|
+
for (const line of lines) {
|
|
69
|
+
try {
|
|
70
|
+
const entry = JSON.parse(line);
|
|
71
|
+
// Apply level filter
|
|
72
|
+
const entryPriority = levelPriority[entry.level] ?? 0;
|
|
73
|
+
if (entryPriority < filterPriority) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
entries.push(entry);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Skip malformed lines
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Get last N entries
|
|
83
|
+
const tailEntries = entries.slice(-tailCount);
|
|
84
|
+
if (getOutputOptions().json) {
|
|
85
|
+
output(tailEntries);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (tailEntries.length === 0) {
|
|
89
|
+
console.log('No log entries found matching criteria.');
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// Format and print entries
|
|
93
|
+
for (const entry of tailEntries) {
|
|
94
|
+
const time = formatLogTime(entry.ts);
|
|
95
|
+
const level = entry.level.padEnd(5);
|
|
96
|
+
const category = entry.category ? `[${entry.category}] ` : '';
|
|
97
|
+
const message = entry.message;
|
|
98
|
+
let line = `[${time}] ${level} ${category}${message}`;
|
|
99
|
+
// Apply color if enabled
|
|
100
|
+
if (options.color && entry.level !== 'INFO') {
|
|
101
|
+
const color = entry.level === 'ERROR' ? LOG_COLORS.ERROR : LOG_COLORS.WARN;
|
|
102
|
+
line = `${color}${line}${LOG_COLORS.RESET}`;
|
|
103
|
+
}
|
|
104
|
+
console.log(line);
|
|
105
|
+
}
|
|
106
|
+
console.log(`\n--- Showing last ${tailEntries.length} of ${entries.length} entries ---`);
|
|
107
|
+
});
|
|
108
|
+
return cmd;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Format ISO timestamp to HH:MM:SS.mmm
|
|
112
|
+
*/
|
|
113
|
+
function formatLogTime(isoTimestamp) {
|
|
114
|
+
try {
|
|
115
|
+
const date = new Date(isoTimestamp);
|
|
116
|
+
const hours = date.getHours().toString().padStart(2, '0');
|
|
117
|
+
const minutes = date.getMinutes().toString().padStart(2, '0');
|
|
118
|
+
const seconds = date.getSeconds().toString().padStart(2, '0');
|
|
119
|
+
const ms = date.getMilliseconds().toString().padStart(3, '0');
|
|
120
|
+
return `${hours}:${minutes}:${seconds}.${ms}`;
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return isoTimestamp.slice(11, 23);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proxy Command (Phase 5.0+)
|
|
3
|
+
*
|
|
4
|
+
* pfscan proxy start [options]
|
|
5
|
+
* pfscan proxy status [--json]
|
|
6
|
+
*
|
|
7
|
+
* Starts an MCP proxy server that aggregates tools from multiple
|
|
8
|
+
* backend connectors, and provides status display.
|
|
9
|
+
*/
|
|
10
|
+
import { Command } from 'commander';
|
|
11
|
+
export declare function createProxyCommand(getConfigPath: () => string): Command;
|
|
12
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/commands/proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,OAAO,CAoNvE"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proxy Command (Phase 5.0+)
|
|
3
|
+
*
|
|
4
|
+
* pfscan proxy start [options]
|
|
5
|
+
* pfscan proxy status [--json]
|
|
6
|
+
*
|
|
7
|
+
* Starts an MCP proxy server that aggregates tools from multiple
|
|
8
|
+
* backend connectors, and provides status display.
|
|
9
|
+
*/
|
|
10
|
+
import { Command } from 'commander';
|
|
11
|
+
import { ConfigManager } from '../config/index.js';
|
|
12
|
+
import { McpProxyServer, setVerbose, logger, RuntimeStateManager, } from '../proxy/index.js';
|
|
13
|
+
import { output, getOutputOptions } from '../utils/output.js';
|
|
14
|
+
import { formatRelativeTime } from '../utils/time.js';
|
|
15
|
+
export function createProxyCommand(getConfigPath) {
|
|
16
|
+
const cmd = new Command('proxy')
|
|
17
|
+
.description('MCP proxy server operations');
|
|
18
|
+
cmd
|
|
19
|
+
.command('start')
|
|
20
|
+
.description('Start MCP proxy server (stdio)')
|
|
21
|
+
.option('--connectors <ids>', 'Connector IDs to expose (comma-separated)')
|
|
22
|
+
.option('--all', 'Expose all enabled connectors')
|
|
23
|
+
.option('--timeout <seconds>', 'Timeout for backend calls in seconds (default: 30)', '30')
|
|
24
|
+
.action(async (options) => {
|
|
25
|
+
// Set up logging - use global verbose option from CLI
|
|
26
|
+
const globalOpts = getOutputOptions();
|
|
27
|
+
if (globalOpts.verbose) {
|
|
28
|
+
setVerbose(true);
|
|
29
|
+
}
|
|
30
|
+
// Validate mutually exclusive options
|
|
31
|
+
if (options.connectors && options.all) {
|
|
32
|
+
logger.error('Cannot use --connectors and --all together');
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
if (!options.connectors && !options.all) {
|
|
36
|
+
logger.error('Must specify --connectors <ids> or --all');
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
// Load config
|
|
40
|
+
const configPath = getConfigPath();
|
|
41
|
+
const manager = new ConfigManager(configPath);
|
|
42
|
+
const configDir = manager.getConfigDir();
|
|
43
|
+
let config;
|
|
44
|
+
try {
|
|
45
|
+
config = await manager.load();
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
49
|
+
logger.error(`Failed to load config: ${msg}`);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
// Resolve connectors
|
|
53
|
+
let connectors;
|
|
54
|
+
if (options.all) {
|
|
55
|
+
// All enabled connectors
|
|
56
|
+
connectors = config.connectors.filter((c) => c.enabled);
|
|
57
|
+
if (connectors.length === 0) {
|
|
58
|
+
logger.error('No enabled connectors found');
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
logger.info(`Using ${connectors.length} enabled connector(s)`);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// Specific connectors
|
|
65
|
+
const ids = options.connectors.split(',').map((id) => id.trim());
|
|
66
|
+
connectors = [];
|
|
67
|
+
for (const id of ids) {
|
|
68
|
+
const connector = config.connectors.find((c) => c.id === id);
|
|
69
|
+
if (!connector) {
|
|
70
|
+
logger.error(`Connector not found: ${id}`);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
if (!connector.enabled) {
|
|
74
|
+
logger.warn(`Connector disabled, skipping: ${id}`);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
connectors.push(connector);
|
|
78
|
+
}
|
|
79
|
+
if (connectors.length === 0) {
|
|
80
|
+
logger.error('No valid connectors to expose');
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
logger.info(`Using ${connectors.length} connector(s): ${connectors.map(c => c.id).join(', ')}`);
|
|
84
|
+
}
|
|
85
|
+
// Parse timeout
|
|
86
|
+
const timeout = parseInt(options.timeout, 10);
|
|
87
|
+
if (isNaN(timeout) || timeout < 1 || timeout > 300) {
|
|
88
|
+
logger.error('Invalid timeout: must be 1-300 seconds');
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
// Create and start server
|
|
92
|
+
const server = new McpProxyServer({
|
|
93
|
+
connectors,
|
|
94
|
+
configDir,
|
|
95
|
+
verbose: globalOpts.verbose,
|
|
96
|
+
timeout,
|
|
97
|
+
});
|
|
98
|
+
// Handle signals for graceful shutdown
|
|
99
|
+
const shutdown = () => {
|
|
100
|
+
logger.info('Received shutdown signal');
|
|
101
|
+
server.stop();
|
|
102
|
+
process.exit(0);
|
|
103
|
+
};
|
|
104
|
+
process.on('SIGINT', shutdown);
|
|
105
|
+
process.on('SIGTERM', shutdown);
|
|
106
|
+
// Handle server stop
|
|
107
|
+
server.on('stopped', () => {
|
|
108
|
+
process.exit(0);
|
|
109
|
+
});
|
|
110
|
+
try {
|
|
111
|
+
await server.start();
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
115
|
+
logger.error(`Failed to start server: ${msg}`);
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
// Status subcommand
|
|
120
|
+
cmd
|
|
121
|
+
.command('status')
|
|
122
|
+
.description('Show proxy runtime status')
|
|
123
|
+
.action(async () => {
|
|
124
|
+
const configPath = getConfigPath();
|
|
125
|
+
const manager = new ConfigManager(configPath);
|
|
126
|
+
const configDir = manager.getConfigDir();
|
|
127
|
+
const state = await RuntimeStateManager.read(configDir);
|
|
128
|
+
if (!state) {
|
|
129
|
+
if (getOutputOptions().json) {
|
|
130
|
+
output({ running: false, message: 'No proxy state found' });
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log('Proxy Status: No state found (proxy may never have run)');
|
|
134
|
+
}
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const isAlive = RuntimeStateManager.isProxyAlive(state);
|
|
138
|
+
if (getOutputOptions().json) {
|
|
139
|
+
output({
|
|
140
|
+
running: isAlive,
|
|
141
|
+
...state,
|
|
142
|
+
});
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// Human-readable output
|
|
146
|
+
console.log('Proxy Status');
|
|
147
|
+
console.log('═══════════════════════════════════════════════════\n');
|
|
148
|
+
// Proxy info
|
|
149
|
+
const proxyState = isAlive ? 'RUNNING' : (state.proxy.state === 'RUNNING' ? 'STALE' : 'STOPPED');
|
|
150
|
+
console.log(`State: ${proxyState}`);
|
|
151
|
+
console.log(`Mode: ${state.proxy.mode}`);
|
|
152
|
+
console.log(`PID: ${state.proxy.pid}`);
|
|
153
|
+
if (state.proxy.startedAt) {
|
|
154
|
+
console.log(`Started: ${state.proxy.startedAt}`);
|
|
155
|
+
const uptime = formatUptime(state.proxy.startedAt);
|
|
156
|
+
console.log(`Uptime: ${uptime}`);
|
|
157
|
+
}
|
|
158
|
+
if (state.proxy.heartbeat) {
|
|
159
|
+
console.log(`Heartbeat: ${formatRelativeTime(state.proxy.heartbeat)}`);
|
|
160
|
+
}
|
|
161
|
+
// Connectors
|
|
162
|
+
console.log('\nConnectors:');
|
|
163
|
+
if (state.connectors.length === 0) {
|
|
164
|
+
console.log(' (none)');
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
for (const conn of state.connectors) {
|
|
168
|
+
const status = conn.healthy ? '●' : '○';
|
|
169
|
+
const tools = conn.toolCount > 0 ? `${conn.toolCount} tools` : 'pending';
|
|
170
|
+
const error = conn.error ? ` (${conn.error})` : '';
|
|
171
|
+
console.log(` ${status} ${conn.id}: ${tools}${error}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Clients
|
|
175
|
+
console.log('\nClients:');
|
|
176
|
+
const clientEntries = Object.values(state.clients);
|
|
177
|
+
if (clientEntries.length === 0) {
|
|
178
|
+
console.log(' (none)');
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
for (const client of clientEntries) {
|
|
182
|
+
const effectiveState = RuntimeStateManager.determineClientState(client);
|
|
183
|
+
const stateIcon = effectiveState === 'active' ? '●' : effectiveState === 'idle' ? '○' : '✕';
|
|
184
|
+
console.log(` ${stateIcon} ${client.name} (${effectiveState})`);
|
|
185
|
+
console.log(` Last seen: ${formatRelativeTime(client.lastSeen)}`);
|
|
186
|
+
console.log(` Sessions: ${client.sessions}, Tool calls: ${client.toolCalls}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Logging
|
|
190
|
+
console.log('\nLogging:');
|
|
191
|
+
console.log(` Level: ${state.logging.level}`);
|
|
192
|
+
console.log(` Buffered: ${state.logging.bufferedLines}/${state.logging.maxLines} lines`);
|
|
193
|
+
});
|
|
194
|
+
return cmd;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Format uptime from startedAt timestamp
|
|
198
|
+
*/
|
|
199
|
+
function formatUptime(startedAt) {
|
|
200
|
+
const start = new Date(startedAt).getTime();
|
|
201
|
+
const now = Date.now();
|
|
202
|
+
const diffMs = now - start;
|
|
203
|
+
if (diffMs < 0)
|
|
204
|
+
return '0s';
|
|
205
|
+
const seconds = Math.floor(diffMs / 1000) % 60;
|
|
206
|
+
const minutes = Math.floor(diffMs / 60000) % 60;
|
|
207
|
+
const hours = Math.floor(diffMs / 3600000) % 24;
|
|
208
|
+
const days = Math.floor(diffMs / 86400000);
|
|
209
|
+
const parts = [];
|
|
210
|
+
if (days > 0)
|
|
211
|
+
parts.push(`${days}d`);
|
|
212
|
+
if (hours > 0)
|
|
213
|
+
parts.push(`${hours}h`);
|
|
214
|
+
if (minutes > 0)
|
|
215
|
+
parts.push(`${minutes}m`);
|
|
216
|
+
if (seconds > 0 || parts.length === 0)
|
|
217
|
+
parts.push(`${seconds}s`);
|
|
218
|
+
return parts.join(' ');
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/commands/proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proxy Module Exports (Phase 5.0+)
|
|
3
|
+
*/
|
|
4
|
+
export { logger, setVerbose, isVerbose, LogRingBuffer, getRingBuffer, type LogEntry, type RingBufferConfig, } from './logger.js';
|
|
5
|
+
export { ToolAggregator } from './tool-aggregator.js';
|
|
6
|
+
export { RequestRouter } from './request-router.js';
|
|
7
|
+
export { McpProxyServer } from './mcp-server.js';
|
|
8
|
+
export { RuntimeStateManager, DEFAULT_RUNTIME_STATE, type ClientState, type ClientInfo, type ConnectorSummary, type ProxyRuntimeState, } from './runtime-state.js';
|
|
9
|
+
export { NAMESPACE_SEPARATOR, MCP_ERROR, type ProxyOptions, type NamespacedTool, type ParsedNamespace, type RouteResult, type JsonRpcRequest, type JsonRpcResponse, type McpErrorCode, } from './types.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,MAAM,EACN,UAAU,EACV,SAAS,EACT,aAAa,EACb,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proxy Module Exports (Phase 5.0+)
|
|
3
|
+
*/
|
|
4
|
+
export { logger, setVerbose, isVerbose, LogRingBuffer, getRingBuffer, } from './logger.js';
|
|
5
|
+
export { ToolAggregator } from './tool-aggregator.js';
|
|
6
|
+
export { RequestRouter } from './request-router.js';
|
|
7
|
+
export { McpProxyServer } from './mcp-server.js';
|
|
8
|
+
export { RuntimeStateManager, DEFAULT_RUNTIME_STATE, } from './runtime-state.js';
|
|
9
|
+
export { NAMESPACE_SEPARATOR, MCP_ERROR, } from './types.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,MAAM,EACN,UAAU,EACV,SAAS,EACT,aAAa,EACb,aAAa,GAGd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GAKtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,SAAS,GAQV,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proxy Logger Module (Phase 5.0+)
|
|
3
|
+
*
|
|
4
|
+
* Structured logging to stderr only (stdout reserved for JSON-RPC).
|
|
5
|
+
* Includes ring buffer for CLI log viewing.
|
|
6
|
+
*
|
|
7
|
+
* Log levels:
|
|
8
|
+
* - ERROR: Always output (red)
|
|
9
|
+
* - WARN: Always output (yellow)
|
|
10
|
+
* - INFO: Only when verbose mode enabled (no color)
|
|
11
|
+
*/
|
|
12
|
+
export type LogLevel = 'INFO' | 'WARN' | 'ERROR';
|
|
13
|
+
declare const COLORS: {
|
|
14
|
+
readonly WARN: "\u001B[33m";
|
|
15
|
+
readonly ERROR: "\u001B[31m";
|
|
16
|
+
readonly RESET: "\u001B[0m";
|
|
17
|
+
};
|
|
18
|
+
export { COLORS as LOG_COLORS };
|
|
19
|
+
/** Log entry structure for ring buffer */
|
|
20
|
+
export interface LogEntry {
|
|
21
|
+
/** Timestamp in ISO format */
|
|
22
|
+
ts: string;
|
|
23
|
+
/** Log level */
|
|
24
|
+
level: LogLevel;
|
|
25
|
+
/** Category (optional, e.g., 'router', 'aggregator') */
|
|
26
|
+
category?: string;
|
|
27
|
+
/** Log message */
|
|
28
|
+
message: string;
|
|
29
|
+
}
|
|
30
|
+
/** Ring buffer configuration */
|
|
31
|
+
export interface RingBufferConfig {
|
|
32
|
+
/** Maximum lines to retain (default: 1000) */
|
|
33
|
+
maxLines: number;
|
|
34
|
+
/** Path to log file */
|
|
35
|
+
logPath: string;
|
|
36
|
+
/** Callback when buffer count changes */
|
|
37
|
+
onCountChange?: (count: number) => void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Log Ring Buffer
|
|
41
|
+
*
|
|
42
|
+
* Appends logs to JSONL file with automatic rotation.
|
|
43
|
+
* Oldest entries are discarded when maxLines is exceeded.
|
|
44
|
+
*/
|
|
45
|
+
export declare class LogRingBuffer {
|
|
46
|
+
private readonly config;
|
|
47
|
+
private lineCount;
|
|
48
|
+
private pendingWrites;
|
|
49
|
+
constructor(config: RingBufferConfig);
|
|
50
|
+
/**
|
|
51
|
+
* Initialize line count from existing file
|
|
52
|
+
*/
|
|
53
|
+
private initLineCount;
|
|
54
|
+
/**
|
|
55
|
+
* Append a log entry
|
|
56
|
+
*/
|
|
57
|
+
append(entry: LogEntry): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Read last N entries
|
|
60
|
+
*/
|
|
61
|
+
tail(n: number, filter?: {
|
|
62
|
+
level?: string;
|
|
63
|
+
}): Promise<LogEntry[]>;
|
|
64
|
+
/**
|
|
65
|
+
* Get current line count
|
|
66
|
+
*/
|
|
67
|
+
getCount(): number;
|
|
68
|
+
/**
|
|
69
|
+
* Rotate buffer (remove oldest entries when over limit)
|
|
70
|
+
*/
|
|
71
|
+
private rotate;
|
|
72
|
+
/**
|
|
73
|
+
* Clear the log file
|
|
74
|
+
*/
|
|
75
|
+
clear(): Promise<void>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Initialize ring buffer (called on proxy start)
|
|
79
|
+
*/
|
|
80
|
+
export declare function initializeRingBuffer(config: RingBufferConfig): void;
|
|
81
|
+
/**
|
|
82
|
+
* Get the current ring buffer instance
|
|
83
|
+
*/
|
|
84
|
+
export declare function getRingBuffer(): LogRingBuffer | null;
|
|
85
|
+
/**
|
|
86
|
+
* Set verbose mode (enables INFO logs)
|
|
87
|
+
*/
|
|
88
|
+
export declare function setVerbose(enabled: boolean): void;
|
|
89
|
+
/**
|
|
90
|
+
* Check if verbose mode is enabled
|
|
91
|
+
*/
|
|
92
|
+
export declare function isVerbose(): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Logger instance with optional category support
|
|
95
|
+
*/
|
|
96
|
+
export declare const logger: {
|
|
97
|
+
/**
|
|
98
|
+
* Info level - only shown when verbose mode is enabled
|
|
99
|
+
*/
|
|
100
|
+
info: (msg: string, category?: string) => void;
|
|
101
|
+
/**
|
|
102
|
+
* Warning level - always shown (yellow)
|
|
103
|
+
*/
|
|
104
|
+
warn: (msg: string, category?: string) => void;
|
|
105
|
+
/**
|
|
106
|
+
* Error level - always shown (red)
|
|
107
|
+
*/
|
|
108
|
+
error: (msg: string, category?: string) => void;
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/proxy/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,QAAA,MAAM,MAAM;;;;CAIF,CAAC;AAEX,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,CAAC;AAQhC,0CAA0C;AAC1C,MAAM,WAAW,QAAQ;IACvB,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB;IAChB,KAAK,EAAE,QAAQ,CAAC;IAChB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gCAAgC;AAChC,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAAoC;gBAE7C,MAAM,EAAE,gBAAgB;IAQpC;;OAEG;YACW,aAAa;IAc3B;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B5C;;OAEG;IACG,IAAI,CACR,CAAC,EAAE,MAAM,EACT,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1B,OAAO,CAAC,QAAQ,EAAE,CAAC;IA6CtB;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;YACW,MAAM;IAqBpB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAEnE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,aAAa,GAAG,IAAI,CAEpD;AA2DD;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;GAEG;AACH,eAAO,MAAM,MAAM;IACjB;;OAEG;gBACS,MAAM,aAAa,MAAM,KAAG,IAAI;IAE5C;;OAEG;gBACS,MAAM,aAAa,MAAM,KAAG,IAAI;IAE5C;;OAEG;iBACU,MAAM,aAAa,MAAM,KAAG,IAAI;CAC9C,CAAC"}
|