@redonvn/cli 0.1.9 → 0.1.11
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/api/agent.d.ts +7 -0
- package/dist/api/agent.js +18 -0
- package/dist/api/agent.js.map +1 -0
- package/dist/api/auth.d.ts +5 -0
- package/dist/api/auth.js +14 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/chat.d.ts +22 -0
- package/dist/api/chat.js +231 -0
- package/dist/api/chat.js.map +1 -0
- package/dist/auth/store.d.ts +7 -0
- package/dist/auth/store.js +17 -0
- package/dist/auth/store.js.map +1 -1
- package/dist/build-info.d.ts +2 -2
- package/dist/build-info.js +3 -3
- package/dist/build-info.js.map +1 -1
- package/dist/cli/commands/ask.js +1102 -279
- package/dist/cli/commands/ask.js.map +1 -1
- package/dist/cli/commands/login.d.ts +0 -1
- package/dist/cli/commands/login.js +7 -18
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/logs.d.ts +4 -0
- package/dist/cli/commands/logs.js +66 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +3 -16
- package/dist/cli/commands/mcp.js +191 -74
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/start.d.ts +7 -1
- package/dist/cli/commands/start.js +61 -2
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.js +3 -5
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/stop.d.ts +1 -0
- package/dist/cli/commands/stop.js +53 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/index.js +42 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli-router/detect.d.ts +2 -1
- package/dist/cli-router/detect.js +10 -3
- package/dist/cli-router/detect.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/daemon/tunnel.js +4 -3
- package/dist/daemon/tunnel.js.map +1 -1
- package/dist/mcp/chrome-launcher.d.ts +14 -0
- package/dist/mcp/chrome-launcher.js +114 -0
- package/dist/mcp/chrome-launcher.js.map +1 -0
- package/dist/mcp/client.d.ts +1 -0
- package/dist/mcp/client.js +9 -2
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/config.d.ts +17 -9
- package/dist/mcp/config.js +134 -23
- package/dist/mcp/config.js.map +1 -1
- package/package.json +4 -2
package/dist/cli/index.js
CHANGED
|
@@ -15,6 +15,8 @@ const permission_1 = require("./commands/permission");
|
|
|
15
15
|
const serve_1 = require("./commands/serve");
|
|
16
16
|
const start_1 = require("./commands/start");
|
|
17
17
|
const status_1 = require("./commands/status");
|
|
18
|
+
const logs_1 = require("./commands/logs");
|
|
19
|
+
const stop_1 = require("./commands/stop");
|
|
18
20
|
function parseArgs(argv) {
|
|
19
21
|
const args = argv.slice(2);
|
|
20
22
|
// No argument → enter interactive shell
|
|
@@ -43,7 +45,10 @@ function printHelp() {
|
|
|
43
45
|
console.log(' redai Enter RedAI interactive shell');
|
|
44
46
|
console.log(' redai login [--env dev|prod] [--api-key <k>] [--api-url <url>] Login RedAI');
|
|
45
47
|
console.log(' redai status Show current login + capabilities');
|
|
46
|
-
console.log(' redai start Connect WS, keep tools online');
|
|
48
|
+
console.log(' redai start Connect WS, keep tools online (foreground)');
|
|
49
|
+
console.log(' redai start --daemon Chạy nền, ghi log vào ~/.redai/daemon.log');
|
|
50
|
+
console.log(' redai stop Dừng daemon đang chạy nền');
|
|
51
|
+
console.log(' redai logs [--follow] [--lines N] Xem log daemon (--follow/-f để stream)');
|
|
47
52
|
console.log(' redai serve [--port 8317] [--api-key <k>] HTTP server expose /v1/messages /v1/chat/completions /v1beta');
|
|
48
53
|
console.log(' redai logout Remove local RedAI token');
|
|
49
54
|
console.log();
|
|
@@ -68,7 +73,10 @@ function printHelp() {
|
|
|
68
73
|
console.log(' redai mcp list List configured MCP servers and their tools');
|
|
69
74
|
console.log(' redai mcp add [server] Add MCP server from catalog (interactive or by name)');
|
|
70
75
|
console.log(' redai mcp remove <server> Remove a configured MCP server');
|
|
76
|
+
console.log(' redai mcp enable <server> Enable a disabled MCP server');
|
|
77
|
+
console.log(' redai mcp disable <server> Disable an MCP server without removing it');
|
|
71
78
|
console.log(' redai mcp test <server> Ping an MCP server, verify tools available');
|
|
79
|
+
console.log(' redai mcp chrome-start Launch Chrome with CDP debug profile (for chrome-devtools MCP)');
|
|
72
80
|
console.log();
|
|
73
81
|
console.log('Local permissions:');
|
|
74
82
|
console.log(' redai permission list Show all tools and their enabled/disabled status');
|
|
@@ -103,7 +111,16 @@ async function main() {
|
|
|
103
111
|
await (0, status_1.statusCommand)();
|
|
104
112
|
return;
|
|
105
113
|
case 'start':
|
|
106
|
-
await (0, start_1.startCommand)();
|
|
114
|
+
await (0, start_1.startCommand)({ daemon: flags['daemon'] === true || flags['d'] === true });
|
|
115
|
+
return;
|
|
116
|
+
case 'stop':
|
|
117
|
+
(0, stop_1.stopCommand)();
|
|
118
|
+
return;
|
|
119
|
+
case 'logs':
|
|
120
|
+
(0, logs_1.logsCommand)({
|
|
121
|
+
follow: flags['follow'] === true || flags['f'] === true,
|
|
122
|
+
lines: typeof flags['lines'] === 'string' ? parseInt(flags['lines'], 10) : undefined,
|
|
123
|
+
});
|
|
107
124
|
return;
|
|
108
125
|
case 'serve':
|
|
109
126
|
await (0, serve_1.serveCommand)({
|
|
@@ -173,8 +190,30 @@ async function main() {
|
|
|
173
190
|
await (0, mcp_1.mcpTestCommand)(server);
|
|
174
191
|
return;
|
|
175
192
|
}
|
|
193
|
+
if (sub === 'enable') {
|
|
194
|
+
const server = process.argv[4];
|
|
195
|
+
if (!server) {
|
|
196
|
+
console.error(chalk_1.default.red('Usage: redai mcp enable <server>'));
|
|
197
|
+
process.exit(1);
|
|
198
|
+
}
|
|
199
|
+
await (0, mcp_1.mcpEnableCommand)(server);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
if (sub === 'disable') {
|
|
203
|
+
const server = process.argv[4];
|
|
204
|
+
if (!server) {
|
|
205
|
+
console.error(chalk_1.default.red('Usage: redai mcp disable <server>'));
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
await (0, mcp_1.mcpDisableCommand)(server);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (sub === 'chrome-start') {
|
|
212
|
+
await (0, mcp_1.mcpChromeStartCommand)();
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
176
215
|
console.error(chalk_1.default.red(`Unknown mcp subcommand: ${sub}`));
|
|
177
|
-
console.error(chalk_1.default.dim('Usage: redai mcp [list|add|remove|test]'));
|
|
216
|
+
console.error(chalk_1.default.dim('Usage: redai mcp [list|add|remove|enable|disable|test|chrome-start]'));
|
|
178
217
|
process.exit(1);
|
|
179
218
|
}
|
|
180
219
|
case 'help':
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAC1B,sCAAwC;AACxC,4CAAgD;AAChD,8CAAkD;AAClD,4CAI0B;AAC1B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Capability } from '@redonvn/cli-protocol';
|
|
1
|
+
import type { Capability, McpServerInfo } from '@redonvn/cli-protocol';
|
|
2
2
|
/**
|
|
3
3
|
* Detect AI-Agent CLI có sẵn trên máy. Trả:
|
|
4
4
|
* - capabilities: tổng hợp gồm 3 nhóm:
|
|
@@ -10,4 +10,5 @@ import type { Capability } from '@redonvn/cli-protocol';
|
|
|
10
10
|
export declare function detectCapabilities(): {
|
|
11
11
|
capabilities: Capability[];
|
|
12
12
|
cliDetected: Record<string, string>;
|
|
13
|
+
mcpServers: McpServerInfo[];
|
|
13
14
|
};
|
|
@@ -39,11 +39,18 @@ function detectCapabilities() {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
// (4) MCP capabilities — phụ thuộc ~/.redai/mcp.json
|
|
42
|
-
const
|
|
43
|
-
|
|
42
|
+
const mcpConfig = (0, config_1.loadMcpConfig)();
|
|
43
|
+
const mcpServers = [];
|
|
44
|
+
for (const [serverName, cfg] of Object.entries(mcpConfig)) {
|
|
44
45
|
capabilities.push(`mcp-${serverName}`);
|
|
46
|
+
mcpServers.push({
|
|
47
|
+
name: serverName,
|
|
48
|
+
command: cfg.command,
|
|
49
|
+
args: cfg.args,
|
|
50
|
+
enabled: cfg.enabled !== false,
|
|
51
|
+
});
|
|
45
52
|
}
|
|
46
|
-
return { capabilities, cliDetected };
|
|
53
|
+
return { capabilities, cliDetected, mcpServers };
|
|
47
54
|
}
|
|
48
55
|
function sniffVersion(binary) {
|
|
49
56
|
for (const arg of ['--version', '-v', 'version']) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/cli-router/detect.ts"],"names":[],"mappings":";;AAaA,
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/cli-router/detect.ts"],"names":[],"mappings":";;AAaA,gDA+CC;AA5DD,iDAA0C;AAE1C,8CAAkD;AAClD,0CAA8C;AAE9C;;;;;;;GAOG;AACH,SAAgB,kBAAkB;IAKhC,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,MAAM,YAAY,GAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAE9E,wDAAwD;IACxD,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAU,EAAE,CAAC;QACzD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,OAAO,EAAE,CAAC;YACZ,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,GAAiB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,KAAK,MAAM,QAAQ,IAAI;QACrB,QAAQ;QACR,OAAO;QACP,QAAQ;QACR,aAAa;QACb,MAAM;QACN,MAAM;QACN,OAAO;QACP,KAAK;KACG,EAAE,CAAC;QACX,IAAI,IAAA,oBAAY,EAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,YAAY,CAAC,IAAI,CAAC,OAAO,QAAQ,EAAgB,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,MAAM,SAAS,GAAG,IAAA,sBAAa,GAAE,CAAC;IAClC,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1D,YAAY,CAAC,IAAI,CAAC,OAAO,UAAU,EAAgB,CAAC,CAAC;QACrD,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,KAAK;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,KAAK,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE;YACtC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,IAAK;YACd,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvD,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;QACnE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BUILD_ENV, BUILD_TIME, PKG_VERSION } from './build-info';
|
|
2
2
|
export declare const CLI_PACKAGE_NAME = "@redonvn/cli";
|
|
3
3
|
/** Version đồng bộ với `package.json` lúc build — KHÔNG hardcode. */
|
|
4
|
-
export declare const CLI_VERSION = "0.1.
|
|
4
|
+
export declare const CLI_VERSION = "0.1.11";
|
|
5
5
|
/** Re-export build metadata cho status command. */
|
|
6
6
|
export { BUILD_ENV, BUILD_TIME, PKG_VERSION };
|
|
7
7
|
export declare const REDAI_CONFIG_DIR: string;
|
package/dist/daemon/tunnel.js
CHANGED
|
@@ -25,7 +25,7 @@ let startedAt = 0;
|
|
|
25
25
|
*/
|
|
26
26
|
async function startDaemon(cfg) {
|
|
27
27
|
const wsUrl = cfg.wsUrl;
|
|
28
|
-
const { capabilities, cliDetected } = (0, detect_1.detectCapabilities)();
|
|
28
|
+
const { capabilities, cliDetected, mcpServers } = (0, detect_1.detectCapabilities)();
|
|
29
29
|
console.log(chalk_1.default.dim(`[ws] connecting to ${wsUrl}`));
|
|
30
30
|
// socket.io-client gắn namespace ngay trong URL nếu URL có path. Vì wsUrl
|
|
31
31
|
// server trả về dạng `wss://.../redai-cli` → tách host + namespace.
|
|
@@ -44,7 +44,7 @@ async function startDaemon(cfg) {
|
|
|
44
44
|
startedAt = Date.now();
|
|
45
45
|
socket.on('connect', () => {
|
|
46
46
|
console.log(chalk_1.default.green('[ws] connected'), chalk_1.default.dim(`socket=${socket.id}`));
|
|
47
|
-
sendHello(socket, cfg, capabilities, cliDetected);
|
|
47
|
+
sendHello(socket, cfg, capabilities, cliDetected, mcpServers);
|
|
48
48
|
startHeartbeat(socket);
|
|
49
49
|
});
|
|
50
50
|
socket.on('disconnect', (reason) => {
|
|
@@ -74,7 +74,7 @@ async function startDaemon(cfg) {
|
|
|
74
74
|
// Block forever — đợi shutdown
|
|
75
75
|
await new Promise(() => undefined);
|
|
76
76
|
}
|
|
77
|
-
function sendHello(socket, cfg, capabilities, cliDetected) {
|
|
77
|
+
function sendHello(socket, cfg, capabilities, cliDetected, mcpServers) {
|
|
78
78
|
socket.emit(cli_protocol_1.CLI_SOCKET_EVENTS.ENVELOPE, (0, cli_protocol_1.buildEnvelope)(cli_protocol_1.CLI_ENVELOPE_TYPES.HELLO, {
|
|
79
79
|
clientId: cfg.clientId,
|
|
80
80
|
hostname: os_1.default.hostname(),
|
|
@@ -82,6 +82,7 @@ function sendHello(socket, cfg, capabilities, cliDetected) {
|
|
|
82
82
|
cliVersion: config_1.CLI_VERSION,
|
|
83
83
|
capabilities,
|
|
84
84
|
cliDetected,
|
|
85
|
+
mcpServers,
|
|
85
86
|
}));
|
|
86
87
|
}
|
|
87
88
|
function startHeartbeat(socket) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/daemon/tunnel.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/daemon/tunnel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ChildProcess } from 'child_process';
|
|
2
|
+
declare const CDP_PORT = 9222;
|
|
3
|
+
declare const DEBUG_PROFILE_DIR: string;
|
|
4
|
+
export declare function findChromePath(): string | null;
|
|
5
|
+
export declare function isCdpAlive(port?: number): Promise<boolean>;
|
|
6
|
+
export interface LaunchResult {
|
|
7
|
+
ok: boolean;
|
|
8
|
+
alreadyRunning: boolean;
|
|
9
|
+
chromePath?: string;
|
|
10
|
+
process?: ChildProcess;
|
|
11
|
+
error?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function launchChromeForDebug(port?: number): Promise<LaunchResult>;
|
|
14
|
+
export { CDP_PORT, DEBUG_PROFILE_DIR };
|
|
@@ -0,0 +1,114 @@
|
|
|
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.DEBUG_PROFILE_DIR = exports.CDP_PORT = void 0;
|
|
7
|
+
exports.findChromePath = findChromePath;
|
|
8
|
+
exports.isCdpAlive = isCdpAlive;
|
|
9
|
+
exports.launchChromeForDebug = launchChromeForDebug;
|
|
10
|
+
const child_process_1 = require("child_process");
|
|
11
|
+
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const http_1 = __importDefault(require("http"));
|
|
13
|
+
const os_1 = __importDefault(require("os"));
|
|
14
|
+
const path_1 = __importDefault(require("path"));
|
|
15
|
+
const CDP_PORT = 9222;
|
|
16
|
+
exports.CDP_PORT = CDP_PORT;
|
|
17
|
+
const DEBUG_PROFILE_DIR = path_1.default.join(os_1.default.homedir(), '.redai', 'chrome-debug-profile');
|
|
18
|
+
exports.DEBUG_PROFILE_DIR = DEBUG_PROFILE_DIR;
|
|
19
|
+
// ─── Find Chrome executable ───────────────────────────────────────────────────
|
|
20
|
+
const CHROME_PATHS_WIN = [
|
|
21
|
+
'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
|
|
22
|
+
'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
|
|
23
|
+
process.env['LOCALAPPDATA'] && `${process.env['LOCALAPPDATA']}\\Google\\Chrome\\Application\\chrome.exe`,
|
|
24
|
+
'C:\\Program Files\\Google\\Chrome Beta\\Application\\chrome.exe',
|
|
25
|
+
'C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe',
|
|
26
|
+
'C:\\Program Files\\Microsoft\\Edge\\Application\\msedge.exe',
|
|
27
|
+
].filter(Boolean);
|
|
28
|
+
const CHROME_PATHS_MAC = [
|
|
29
|
+
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
|
|
30
|
+
'/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta',
|
|
31
|
+
'/Applications/Brave Browser.app/Contents/MacOS/Brave Browser',
|
|
32
|
+
'/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge',
|
|
33
|
+
];
|
|
34
|
+
const CHROME_PATHS_LINUX = [
|
|
35
|
+
'/usr/bin/google-chrome',
|
|
36
|
+
'/usr/bin/google-chrome-stable',
|
|
37
|
+
'/usr/bin/chromium-browser',
|
|
38
|
+
'/usr/bin/chromium',
|
|
39
|
+
'/snap/bin/chromium',
|
|
40
|
+
];
|
|
41
|
+
function findChromePath() {
|
|
42
|
+
const candidates = process.platform === 'win32' ? CHROME_PATHS_WIN
|
|
43
|
+
: process.platform === 'darwin' ? CHROME_PATHS_MAC
|
|
44
|
+
: CHROME_PATHS_LINUX;
|
|
45
|
+
for (const p of candidates) {
|
|
46
|
+
if (fs_1.default.existsSync(p))
|
|
47
|
+
return p;
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
// ─── Check if CDP port is already open ───────────────────────────────────────
|
|
52
|
+
function isCdpAlive(port = CDP_PORT) {
|
|
53
|
+
return new Promise((resolve) => {
|
|
54
|
+
const req = http_1.default.get(`http://127.0.0.1:${port}/json/version`, (res) => {
|
|
55
|
+
resolve(res.statusCode === 200);
|
|
56
|
+
res.resume();
|
|
57
|
+
});
|
|
58
|
+
req.on('error', () => resolve(false));
|
|
59
|
+
req.setTimeout(1500, () => { req.destroy(); resolve(false); });
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// ─── Wait until CDP is ready ──────────────────────────────────────────────────
|
|
63
|
+
async function waitForCdp(port = CDP_PORT, timeoutMs = 10000) {
|
|
64
|
+
const deadline = Date.now() + timeoutMs;
|
|
65
|
+
while (Date.now() < deadline) {
|
|
66
|
+
if (await isCdpAlive(port))
|
|
67
|
+
return true;
|
|
68
|
+
await new Promise((r) => setTimeout(r, 300));
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
async function launchChromeForDebug(port = CDP_PORT) {
|
|
73
|
+
// Already running — nothing to do
|
|
74
|
+
if (await isCdpAlive(port)) {
|
|
75
|
+
return { ok: true, alreadyRunning: true };
|
|
76
|
+
}
|
|
77
|
+
const chromePath = findChromePath();
|
|
78
|
+
if (!chromePath) {
|
|
79
|
+
return {
|
|
80
|
+
ok: false,
|
|
81
|
+
alreadyRunning: false,
|
|
82
|
+
error: 'Chrome not found. Install Google Chrome or set path manually.',
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// Ensure debug profile dir exists
|
|
86
|
+
if (!fs_1.default.existsSync(DEBUG_PROFILE_DIR)) {
|
|
87
|
+
fs_1.default.mkdirSync(DEBUG_PROFILE_DIR, { recursive: true });
|
|
88
|
+
}
|
|
89
|
+
const args = [
|
|
90
|
+
`--remote-debugging-port=${port}`,
|
|
91
|
+
`--user-data-dir=${DEBUG_PROFILE_DIR}`,
|
|
92
|
+
'--no-first-run',
|
|
93
|
+
'--no-default-browser-check',
|
|
94
|
+
'--disable-popup-blocking',
|
|
95
|
+
'about:blank',
|
|
96
|
+
];
|
|
97
|
+
const child = (0, child_process_1.spawn)(chromePath, args, {
|
|
98
|
+
detached: true,
|
|
99
|
+
stdio: 'ignore',
|
|
100
|
+
});
|
|
101
|
+
child.unref(); // don't keep Node alive waiting for it
|
|
102
|
+
const ready = await waitForCdp(port);
|
|
103
|
+
if (!ready) {
|
|
104
|
+
return {
|
|
105
|
+
ok: false,
|
|
106
|
+
alreadyRunning: false,
|
|
107
|
+
chromePath,
|
|
108
|
+
process: child,
|
|
109
|
+
error: `Chrome launched but CDP port ${port} not responding after 10s.`,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return { ok: true, alreadyRunning: false, chromePath, process: child };
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=chrome-launcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrome-launcher.js","sourceRoot":"","sources":["../../src/mcp/chrome-launcher.ts"],"names":[],"mappings":";;;;;;AAmCA,wCAUC;AAID,gCASC;AAuBD,oDA+CC;AAhID,iDAAyD;AACzD,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,gDAAwB;AAExB,MAAM,QAAQ,GAAG,IAAI,CAAC;AA4Hb,4BAAQ;AA3HjB,MAAM,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAAC;AA2HjE,8CAAiB;AAzHpC,iFAAiF;AAEjF,MAAM,gBAAgB,GAAG;IACvB,4DAA4D;IAC5D,kEAAkE;IAClE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,2CAA2C;IACxG,iEAAiE;IACjE,yEAAyE;IACzE,6DAA6D;CAC9D,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;AAE9B,MAAM,gBAAgB,GAAG;IACvB,8DAA8D;IAC9D,wEAAwE;IACxE,8DAA8D;IAC9D,gEAAgE;CACjE,CAAC;AAEF,MAAM,kBAAkB,GAAG;IACzB,wBAAwB;IACxB,+BAA+B;IAC/B,2BAA2B;IAC3B,mBAAmB;IACnB,oBAAoB;CACrB,CAAC;AAEF,SAAgB,cAAc;IAC5B,MAAM,UAAU,GACd,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAgB;QAC/C,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB;YAClD,CAAC,CAAC,kBAAkB,CAAC;IAEvB,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,YAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAEhF,SAAgB,UAAU,CAAC,IAAI,GAAG,QAAQ;IACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,cAAI,CAAC,GAAG,CAAC,oBAAoB,IAAI,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE;YACpE,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC;YAChC,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AAEjF,KAAK,UAAU,UAAU,CAAC,IAAI,GAAG,QAAQ,EAAE,SAAS,GAAG,KAAM;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAYM,KAAK,UAAU,oBAAoB,CAAC,IAAI,GAAG,QAAQ;IACxD,kCAAkC;IAClC,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,cAAc,EAAE,KAAK;YACrB,KAAK,EAAE,+DAA+D;SACvE,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACtC,YAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,IAAI,GAAG;QACX,2BAA2B,IAAI,EAAE;QACjC,mBAAmB,iBAAiB,EAAE;QACtC,gBAAgB;QAChB,4BAA4B;QAC5B,0BAA0B;QAC1B,aAAa;KACd,CAAC;IAEF,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,UAAU,EAAE,IAAI,EAAE;QACpC,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,uCAAuC;IAEtD,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,EAAE,EAAE,KAAK;YACT,cAAc,EAAE,KAAK;YACrB,UAAU;YACV,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,gCAAgC,IAAI,4BAA4B;SACxE,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACzE,CAAC"}
|
package/dist/mcp/client.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
|
3
3
|
* Singleton pool giữ kết nối MCP client cho từng server.
|
|
4
4
|
* Lazy spawn — chỉ connect khi có tool call đầu tiên đến server đó.
|
|
5
5
|
* Auto-reconnect: nếu transport bị đóng, xóa khỏi pool → lần sau sẽ spawn lại.
|
|
6
|
+
* stderr của child process bị redirect về 'pipe' (không lộ ra terminal).
|
|
6
7
|
*/
|
|
7
8
|
declare class McpClientPool {
|
|
8
9
|
private pool;
|
package/dist/mcp/client.js
CHANGED
|
@@ -4,10 +4,12 @@ exports.mcpClientPool = void 0;
|
|
|
4
4
|
const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
|
|
5
5
|
const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
|
|
6
6
|
const config_1 = require("./config");
|
|
7
|
+
const CONNECT_TIMEOUT_MS = 15000;
|
|
7
8
|
/**
|
|
8
9
|
* Singleton pool giữ kết nối MCP client cho từng server.
|
|
9
10
|
* Lazy spawn — chỉ connect khi có tool call đầu tiên đến server đó.
|
|
10
11
|
* Auto-reconnect: nếu transport bị đóng, xóa khỏi pool → lần sau sẽ spawn lại.
|
|
12
|
+
* stderr của child process bị redirect về 'pipe' (không lộ ra terminal).
|
|
11
13
|
*/
|
|
12
14
|
class McpClientPool {
|
|
13
15
|
constructor() {
|
|
@@ -28,10 +30,15 @@ class McpClientPool {
|
|
|
28
30
|
env: cfg.env
|
|
29
31
|
? Object.fromEntries(Object.entries({ ...process.env, ...cfg.env }).filter(([, v]) => v !== undefined))
|
|
30
32
|
: undefined,
|
|
33
|
+
// Suppress npm warnings and child process noise from leaking to terminal
|
|
34
|
+
stderr: 'pipe',
|
|
31
35
|
});
|
|
32
36
|
const client = new index_js_1.Client({ name: 'redai-cli', version: '1.0.0' }, { capabilities: {} });
|
|
33
|
-
|
|
34
|
-
|
|
37
|
+
// Race connect against timeout so a hung server doesn't block the shell
|
|
38
|
+
await Promise.race([
|
|
39
|
+
client.connect(transport),
|
|
40
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`MCP server "${serverName}" timed out after ${CONNECT_TIMEOUT_MS / 1000}s`)), CONNECT_TIMEOUT_MS)),
|
|
41
|
+
]);
|
|
35
42
|
transport.onclose = () => {
|
|
36
43
|
this.pool.delete(serverName);
|
|
37
44
|
};
|
package/dist/mcp/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":";;;AAAA,wEAAmE;AACnE,wEAAiF;AACjF,qCAA+D;AAO/D
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":";;;AAAA,wEAAmE;AACnE,wEAAiF;AACjF,qCAA+D;AAO/D,MAAM,kBAAkB,GAAG,KAAM,CAAC;AAElC;;;;;GAKG;AACH,MAAM,aAAa;IAAnB;QACU,SAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;IAsD9C,CAAC;IApDC,KAAK,CAAC,SAAS,CAAC,UAAkB;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC,MAAM,CAAC;QAErC,MAAM,OAAO,GAAG,IAAA,sBAAa,GAAE,CAAC;QAChC,MAAM,GAAG,GAAgC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC7D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,eAAe,UAAU,kCAAkC,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,+BAAoB,CAAC;YACzC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;YACpB,GAAG,EAAE,GAAG,CAAC,GAAG;gBACV,CAAC,CAAE,MAAM,CAAC,WAAW,CACjB,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CACvD;gBAC9B,CAAC,CAAC,SAAS;YACb,yEAAyE;YACzE,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,iBAAM,CACvB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EACvC,EAAE,YAAY,EAAE,EAAE,EAAE,CACrB,CAAC;QAEF,wEAAwE;QACxE,MAAM,OAAO,CAAC,IAAI,CAAC;YACjB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;YACzB,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,UAAU,qBAAqB,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,CACpI;SACF,CAAC,CAAC;QAEH,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACjD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/B,CAAC;CACF;AAEY,QAAA,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
|
package/dist/mcp/config.d.ts
CHANGED
|
@@ -4,16 +4,19 @@ declare const McpServerConfigSchema: z.ZodObject<{
|
|
|
4
4
|
args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
5
5
|
env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
6
6
|
transport: z.ZodLiteral<"stdio">;
|
|
7
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
7
8
|
}, "strip", z.ZodTypeAny, {
|
|
8
9
|
command: string;
|
|
9
10
|
transport: "stdio";
|
|
10
|
-
args?: string[] | undefined;
|
|
11
11
|
env?: Record<string, string> | undefined;
|
|
12
|
+
args?: string[] | undefined;
|
|
13
|
+
enabled?: boolean | undefined;
|
|
12
14
|
}, {
|
|
13
15
|
command: string;
|
|
14
16
|
transport: "stdio";
|
|
15
|
-
args?: string[] | undefined;
|
|
16
17
|
env?: Record<string, string> | undefined;
|
|
18
|
+
args?: string[] | undefined;
|
|
19
|
+
enabled?: boolean | undefined;
|
|
17
20
|
}>;
|
|
18
21
|
declare const McpConfigFileSchema: z.ZodObject<{
|
|
19
22
|
servers: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
@@ -21,30 +24,35 @@ declare const McpConfigFileSchema: z.ZodObject<{
|
|
|
21
24
|
args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
22
25
|
env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
23
26
|
transport: z.ZodLiteral<"stdio">;
|
|
27
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
24
28
|
}, "strip", z.ZodTypeAny, {
|
|
25
29
|
command: string;
|
|
26
30
|
transport: "stdio";
|
|
27
|
-
args?: string[] | undefined;
|
|
28
31
|
env?: Record<string, string> | undefined;
|
|
32
|
+
args?: string[] | undefined;
|
|
33
|
+
enabled?: boolean | undefined;
|
|
29
34
|
}, {
|
|
30
35
|
command: string;
|
|
31
36
|
transport: "stdio";
|
|
32
|
-
args?: string[] | undefined;
|
|
33
37
|
env?: Record<string, string> | undefined;
|
|
38
|
+
args?: string[] | undefined;
|
|
39
|
+
enabled?: boolean | undefined;
|
|
34
40
|
}>>;
|
|
35
41
|
}, "strip", z.ZodTypeAny, {
|
|
36
42
|
servers: Record<string, {
|
|
37
43
|
command: string;
|
|
38
44
|
transport: "stdio";
|
|
39
|
-
args?: string[] | undefined;
|
|
40
45
|
env?: Record<string, string> | undefined;
|
|
46
|
+
args?: string[] | undefined;
|
|
47
|
+
enabled?: boolean | undefined;
|
|
41
48
|
}>;
|
|
42
49
|
}, {
|
|
43
50
|
servers: Record<string, {
|
|
44
51
|
command: string;
|
|
45
52
|
transport: "stdio";
|
|
46
|
-
args?: string[] | undefined;
|
|
47
53
|
env?: Record<string, string> | undefined;
|
|
54
|
+
args?: string[] | undefined;
|
|
55
|
+
enabled?: boolean | undefined;
|
|
48
56
|
}>;
|
|
49
57
|
}>;
|
|
50
58
|
export type McpServerConfig = z.infer<typeof McpServerConfigSchema>;
|
|
@@ -52,12 +60,12 @@ export type McpConfigFile = z.infer<typeof McpConfigFileSchema>;
|
|
|
52
60
|
export declare function loadMcpConfig(): Record<string, McpServerConfig>;
|
|
53
61
|
export declare function getMcpConfigPath(): string;
|
|
54
62
|
export declare function saveMcpConfig(servers: Record<string, McpServerConfig>): void;
|
|
63
|
+
/** Returns true if server is installed and not explicitly disabled */
|
|
64
|
+
export declare function isMcpEnabled(cfg: McpServerConfig): boolean;
|
|
65
|
+
export declare function setMcpEnabled(serverName: string, enabled: boolean): void;
|
|
55
66
|
export interface McpCatalogEntry {
|
|
56
|
-
/** Key sẽ dùng trong mcp.json */
|
|
57
67
|
name: string;
|
|
58
|
-
/** Mô tả ngắn cho user */
|
|
59
68
|
description: string;
|
|
60
|
-
/** Các tool nổi bật */
|
|
61
69
|
tools: string;
|
|
62
70
|
config: McpServerConfig;
|
|
63
71
|
}
|