@redonvn/cli 0.1.6 → 0.1.9
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/auth/permissions.d.ts +20 -0
- package/dist/auth/permissions.js +73 -0
- package/dist/auth/permissions.js.map +1 -0
- package/dist/auth/store.d.ts +1 -0
- package/dist/auth/store.js.map +1 -1
- package/dist/build-info.d.ts +2 -2
- package/dist/build-info.js +2 -2
- package/dist/cli/commands/ask.d.ts +1 -0
- package/dist/cli/commands/ask.js +451 -0
- package/dist/cli/commands/ask.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +20 -0
- package/dist/cli/commands/mcp.js +175 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/permission.d.ts +1 -0
- package/dist/cli/commands/permission.js +176 -0
- package/dist/cli/commands/permission.js.map +1 -0
- package/dist/cli/index.js +67 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli-router/detect.js +6 -0
- package/dist/cli-router/detect.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/daemon/tunnel.js +2 -0
- package/dist/daemon/tunnel.js.map +1 -1
- package/dist/mcp/client.d.ts +14 -0
- package/dist/mcp/client.js +51 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/config.d.ts +65 -0
- package/dist/mcp/config.js +132 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/tools/mcp-call.d.ts +1 -0
- package/dist/tools/mcp-call.js +20 -0
- package/dist/tools/mcp-call.js.map +1 -0
- package/dist/tools/mcp-list.d.ts +13 -0
- package/dist/tools/mcp-list.js +43 -0
- package/dist/tools/mcp-list.js.map +1 -0
- package/dist/tools/registry.d.ts +1 -1
- package/dist/tools/registry.js +9 -0
- package/dist/tools/registry.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,175 @@
|
|
|
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.mcpListCommand = mcpListCommand;
|
|
7
|
+
exports.mcpAddCommand = mcpAddCommand;
|
|
8
|
+
exports.mcpRemoveCommand = mcpRemoveCommand;
|
|
9
|
+
exports.mcpTestCommand = mcpTestCommand;
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
12
|
+
const config_1 = require("../../mcp/config");
|
|
13
|
+
const client_1 = require("../../mcp/client");
|
|
14
|
+
/**
|
|
15
|
+
* redai mcp list
|
|
16
|
+
* List tất cả MCP server đã config và tool available của từng server.
|
|
17
|
+
*/
|
|
18
|
+
async function mcpListCommand() {
|
|
19
|
+
const servers = (0, config_1.loadMcpConfig)();
|
|
20
|
+
const names = Object.keys(servers);
|
|
21
|
+
if (names.length === 0) {
|
|
22
|
+
console.log(chalk_1.default.yellow('No MCP servers configured.'));
|
|
23
|
+
console.log(chalk_1.default.dim(`Add servers to: ${(0, config_1.getMcpConfigPath)()}`));
|
|
24
|
+
console.log();
|
|
25
|
+
console.log(chalk_1.default.dim('Example ~/.redai/mcp.json:'));
|
|
26
|
+
console.log(chalk_1.default.dim(JSON.stringify({
|
|
27
|
+
servers: {
|
|
28
|
+
chrome: {
|
|
29
|
+
command: 'npx',
|
|
30
|
+
args: ['-y', '@modelcontextprotocol/server-puppeteer'],
|
|
31
|
+
transport: 'stdio',
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
}, null, 2)));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
console.log(chalk_1.default.cyan(`MCP servers (${names.length})`), chalk_1.default.dim((0, config_1.getMcpConfigPath)()));
|
|
38
|
+
console.log();
|
|
39
|
+
for (const name of names) {
|
|
40
|
+
const cfg = servers[name];
|
|
41
|
+
console.log(` ${chalk_1.default.bold(name)} ${chalk_1.default.dim(`${cfg.command} ${(cfg.args ?? []).join(' ')}`)}`);
|
|
42
|
+
try {
|
|
43
|
+
const client = await client_1.mcpClientPool.getClient(name);
|
|
44
|
+
const { tools } = await client.listTools();
|
|
45
|
+
if (tools.length === 0) {
|
|
46
|
+
console.log(chalk_1.default.dim(' (no tools)'));
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
for (const t of tools) {
|
|
50
|
+
console.log(` ${chalk_1.default.green('✓')} ${t.name}${t.description ? chalk_1.default.dim(' — ' + t.description) : ''}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
console.log(` ${chalk_1.default.red('✗')} ${err instanceof Error ? err.message : String(err)}`);
|
|
56
|
+
}
|
|
57
|
+
console.log();
|
|
58
|
+
}
|
|
59
|
+
await client_1.mcpClientPool.shutdown();
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* redai mcp add [server]
|
|
63
|
+
* Thêm MCP server vào ~/.redai/mcp.json từ catalog hoặc theo tên trực tiếp.
|
|
64
|
+
*/
|
|
65
|
+
async function mcpAddCommand(serverArg) {
|
|
66
|
+
const existing = (0, config_1.loadMcpConfig)();
|
|
67
|
+
// Direct add by name from catalog
|
|
68
|
+
if (serverArg) {
|
|
69
|
+
const entry = config_1.MCP_CATALOG.find((e) => e.name === serverArg);
|
|
70
|
+
if (!entry) {
|
|
71
|
+
console.error(chalk_1.default.red(`Server "${serverArg}" not found in catalog.`));
|
|
72
|
+
console.error(chalk_1.default.dim(`Available: ${config_1.MCP_CATALOG.map((e) => e.name).join(', ')}`));
|
|
73
|
+
process.exitCode = 1;
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (existing[entry.name]) {
|
|
77
|
+
console.log(chalk_1.default.yellow(`"${entry.name}" is already configured. Use 'redai mcp remove ${entry.name}' first.`));
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
existing[entry.name] = entry.config;
|
|
81
|
+
(0, config_1.saveMcpConfig)(existing);
|
|
82
|
+
console.log(chalk_1.default.green(`✓ Added "${entry.name}" to ${(0, config_1.getMcpConfigPath)()}`));
|
|
83
|
+
if (entry.config.env) {
|
|
84
|
+
const keys = Object.keys(entry.config.env);
|
|
85
|
+
console.log(chalk_1.default.yellow(` Set env vars: ${keys.join(', ')}`));
|
|
86
|
+
console.log(chalk_1.default.dim(` Edit ${(0, config_1.getMcpConfigPath)()} to fill in your credentials.`));
|
|
87
|
+
}
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// Interactive catalog picker
|
|
91
|
+
const choices = config_1.MCP_CATALOG.map((entry) => ({
|
|
92
|
+
title: chalk_1.default.bold(entry.name),
|
|
93
|
+
description: `${entry.description} · ${chalk_1.default.dim(entry.tools)}`,
|
|
94
|
+
value: entry.name,
|
|
95
|
+
disabled: !!existing[entry.name],
|
|
96
|
+
}));
|
|
97
|
+
const response = await (0, prompts_1.default)([
|
|
98
|
+
{
|
|
99
|
+
type: 'multiselect',
|
|
100
|
+
name: 'servers',
|
|
101
|
+
message: 'Select MCP servers to add (space to toggle, enter to confirm):',
|
|
102
|
+
choices,
|
|
103
|
+
hint: '(already added servers are disabled)',
|
|
104
|
+
},
|
|
105
|
+
]);
|
|
106
|
+
if (!response.servers || response.servers.length === 0) {
|
|
107
|
+
console.log(chalk_1.default.dim('No servers selected.'));
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const selected = response.servers;
|
|
111
|
+
for (const name of selected) {
|
|
112
|
+
const entry = config_1.MCP_CATALOG.find((e) => e.name === name);
|
|
113
|
+
existing[name] = entry.config;
|
|
114
|
+
console.log(chalk_1.default.green(` ✓ ${name}`));
|
|
115
|
+
if (entry.config.env) {
|
|
116
|
+
const keys = Object.keys(entry.config.env);
|
|
117
|
+
console.log(chalk_1.default.yellow(` Set env vars: ${keys.join(', ')}`));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
(0, config_1.saveMcpConfig)(existing);
|
|
121
|
+
console.log();
|
|
122
|
+
console.log(chalk_1.default.cyan(`Saved to ${(0, config_1.getMcpConfigPath)()}`));
|
|
123
|
+
if (selected.some((n) => config_1.MCP_CATALOG.find((e) => e.name === n)?.config.env)) {
|
|
124
|
+
console.log(chalk_1.default.dim(`Edit the file to fill in your API keys / tokens.`));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* redai mcp remove <server>
|
|
129
|
+
* Xóa MCP server khỏi ~/.redai/mcp.json.
|
|
130
|
+
*/
|
|
131
|
+
async function mcpRemoveCommand(serverName) {
|
|
132
|
+
const existing = (0, config_1.loadMcpConfig)();
|
|
133
|
+
if (!(serverName in existing)) {
|
|
134
|
+
console.error(chalk_1.default.red(`Server "${serverName}" not found in config.`));
|
|
135
|
+
console.error(chalk_1.default.dim(`Configured: ${Object.keys(existing).join(', ') || '(none)'}`));
|
|
136
|
+
process.exitCode = 1;
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
delete existing[serverName];
|
|
140
|
+
(0, config_1.saveMcpConfig)(existing);
|
|
141
|
+
console.log(chalk_1.default.green(`✓ Removed "${serverName}" from ${(0, config_1.getMcpConfigPath)()}`));
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* redai mcp test <server>
|
|
145
|
+
* Ping 1 MCP server cụ thể — spawn, list tools, verify hoạt động.
|
|
146
|
+
*/
|
|
147
|
+
async function mcpTestCommand(serverName) {
|
|
148
|
+
const servers = (0, config_1.loadMcpConfig)();
|
|
149
|
+
if (!(serverName in servers)) {
|
|
150
|
+
console.error(chalk_1.default.red(`Server "${serverName}" not found in ~/.redai/mcp.json`));
|
|
151
|
+
console.error(chalk_1.default.dim(`Available: ${Object.keys(servers).join(', ') || '(none)'}`));
|
|
152
|
+
process.exitCode = 1;
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const cfg = servers[serverName];
|
|
156
|
+
console.log(chalk_1.default.dim(`Testing MCP server: ${chalk_1.default.bold(serverName)}`));
|
|
157
|
+
console.log(chalk_1.default.dim(` command: ${cfg.command} ${(cfg.args ?? []).join(' ')}`));
|
|
158
|
+
console.log();
|
|
159
|
+
try {
|
|
160
|
+
const client = await client_1.mcpClientPool.getClient(serverName);
|
|
161
|
+
const { tools } = await client.listTools();
|
|
162
|
+
console.log(chalk_1.default.green(`✓ Connected. ${tools.length} tool(s) available:`));
|
|
163
|
+
for (const t of tools) {
|
|
164
|
+
console.log(` • ${chalk_1.default.bold(t.name)}${t.description ? chalk_1.default.dim(' — ' + t.description) : ''}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
console.error(chalk_1.default.red('✗ Failed:'), err instanceof Error ? err.message : String(err));
|
|
169
|
+
process.exitCode = 1;
|
|
170
|
+
}
|
|
171
|
+
finally {
|
|
172
|
+
await client_1.mcpClientPool.shutdown();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function permissionCommand(argv: string[]): Promise<void>;
|
|
@@ -0,0 +1,176 @@
|
|
|
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.permissionCommand = permissionCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
9
|
+
const permissions_1 = require("../../auth/permissions");
|
|
10
|
+
// ─── Group tools by category for a cleaner display ────────────────────────────
|
|
11
|
+
const TOOL_GROUPS = [
|
|
12
|
+
{ label: 'File System', tools: ['Read', 'Write', 'Edit', 'Grep', 'Glob'] },
|
|
13
|
+
{ label: 'Shell', tools: ['Bash'] },
|
|
14
|
+
{ label: 'Network', tools: ['WebFetch'] },
|
|
15
|
+
{ label: 'AI Agents', tools: ['RunClaude', 'RunCodex', 'RunGemini', 'LLMRequest'] },
|
|
16
|
+
{ label: 'MCP', tools: ['McpCall', 'McpList'] },
|
|
17
|
+
];
|
|
18
|
+
const TOOL_DESC = {
|
|
19
|
+
Read: 'Read file contents',
|
|
20
|
+
Write: 'Create / overwrite files',
|
|
21
|
+
Edit: 'Find-and-replace inside files',
|
|
22
|
+
Grep: 'Search file content (ripgrep)',
|
|
23
|
+
Glob: 'Find files by pattern',
|
|
24
|
+
Bash: 'Run shell commands ⚠ high-risk',
|
|
25
|
+
WebFetch: 'Fetch URLs from this machine',
|
|
26
|
+
RunClaude: 'Spawn Claude Code agent',
|
|
27
|
+
RunCodex: 'Spawn Codex CLI agent',
|
|
28
|
+
RunGemini: 'Spawn Gemini CLI agent',
|
|
29
|
+
LLMRequest: 'Proxy LLM API via OAuth token',
|
|
30
|
+
McpCall: 'Call MCP server tool',
|
|
31
|
+
McpList: 'List MCP server tools',
|
|
32
|
+
};
|
|
33
|
+
// ─── Plain list (non-interactive fallback) ─────────────────────────────────────
|
|
34
|
+
function printList() {
|
|
35
|
+
const perms = (0, permissions_1.loadPermissions)();
|
|
36
|
+
console.log();
|
|
37
|
+
console.log(chalk_1.default.bold.cyan(' RedAI CLI — Tool Permissions'));
|
|
38
|
+
console.log(chalk_1.default.dim(' ~/.redai/permissions.json'));
|
|
39
|
+
console.log();
|
|
40
|
+
for (const group of TOOL_GROUPS) {
|
|
41
|
+
console.log(chalk_1.default.bold(` ${group.label}`));
|
|
42
|
+
for (const name of group.tools) {
|
|
43
|
+
const disabled = perms[name] === false;
|
|
44
|
+
const badge = disabled
|
|
45
|
+
? chalk_1.default.bgRed.white(' DISABLED ')
|
|
46
|
+
: chalk_1.default.bgGreen.black(' ENABLED ');
|
|
47
|
+
const desc = chalk_1.default.dim(TOOL_DESC[name]);
|
|
48
|
+
console.log(` ${badge} ${chalk_1.default.bold(name.padEnd(12))} ${desc}`);
|
|
49
|
+
}
|
|
50
|
+
console.log();
|
|
51
|
+
}
|
|
52
|
+
const disabledCount = permissions_1.ALL_TOOL_NAMES.filter((n) => perms[n] === false).length;
|
|
53
|
+
if (disabledCount > 0) {
|
|
54
|
+
console.log(chalk_1.default.yellow(` ${disabledCount} tool(s) disabled.`));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
console.log(chalk_1.default.green(' All tools enabled.'));
|
|
58
|
+
}
|
|
59
|
+
console.log();
|
|
60
|
+
console.log(chalk_1.default.dim(' Run `redai permission` (no args) for interactive mode.'));
|
|
61
|
+
console.log();
|
|
62
|
+
}
|
|
63
|
+
// ─── Interactive multi-select with checkboxes ─────────────────────────────────
|
|
64
|
+
async function interactiveMode() {
|
|
65
|
+
const perms = (0, permissions_1.loadPermissions)();
|
|
66
|
+
// Build choices: currently-enabled tools are pre-selected
|
|
67
|
+
const choices = permissions_1.ALL_TOOL_NAMES.map((name) => ({
|
|
68
|
+
title: `${chalk_1.default.bold(name.padEnd(14))} ${chalk_1.default.dim(TOOL_DESC[name])}`,
|
|
69
|
+
value: name,
|
|
70
|
+
selected: perms[name] !== false, // default = enabled
|
|
71
|
+
}));
|
|
72
|
+
console.log();
|
|
73
|
+
console.log(chalk_1.default.bold.cyan(' RedAI CLI — Tool Permissions'));
|
|
74
|
+
console.log(chalk_1.default.dim(' Use ↑↓ to move, Space to toggle, A to select all, Enter to save.\n'));
|
|
75
|
+
const response = await (0, prompts_1.default)({
|
|
76
|
+
type: 'multiselect',
|
|
77
|
+
name: 'enabled',
|
|
78
|
+
message: 'Select tools to ENABLE on this machine',
|
|
79
|
+
choices,
|
|
80
|
+
hint: '- Space to toggle, Enter to confirm',
|
|
81
|
+
instructions: false,
|
|
82
|
+
}, {
|
|
83
|
+
onCancel: () => {
|
|
84
|
+
console.log(chalk_1.default.yellow('\nCancelled — no changes saved.'));
|
|
85
|
+
process.exit(0);
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
// response.enabled = string[] of selected tool names
|
|
89
|
+
const enabledSet = new Set(response.enabled);
|
|
90
|
+
const newPerms = {};
|
|
91
|
+
for (const name of permissions_1.ALL_TOOL_NAMES) {
|
|
92
|
+
newPerms[name] = enabledSet.has(name);
|
|
93
|
+
}
|
|
94
|
+
(0, permissions_1.savePermissions)(newPerms);
|
|
95
|
+
// ── Summary ──────────────────────────────────────────────────────────────────
|
|
96
|
+
console.log();
|
|
97
|
+
const nowDisabled = permissions_1.ALL_TOOL_NAMES.filter((n) => newPerms[n] === false);
|
|
98
|
+
const nowEnabled = permissions_1.ALL_TOOL_NAMES.filter((n) => newPerms[n] !== false);
|
|
99
|
+
if (nowDisabled.length === 0) {
|
|
100
|
+
console.log(chalk_1.default.green(' ✓ All tools enabled. Permissions saved.'));
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
console.log(chalk_1.default.green(` ✓ ${nowEnabled.length} enabled, ${nowDisabled.length} disabled. Permissions saved.`));
|
|
104
|
+
console.log();
|
|
105
|
+
console.log(chalk_1.default.yellow(' Disabled tools:'));
|
|
106
|
+
for (const name of nowDisabled) {
|
|
107
|
+
console.log(` ${chalk_1.default.red('✗')} ${name}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
console.log();
|
|
111
|
+
}
|
|
112
|
+
// ─── Single-tool subcommands (non-interactive, scriptable) ────────────────────
|
|
113
|
+
function resolveToolName(input) {
|
|
114
|
+
const match = permissions_1.ALL_TOOL_NAMES.find((n) => n.toLowerCase() === input.toLowerCase());
|
|
115
|
+
if (!match) {
|
|
116
|
+
console.error(chalk_1.default.red(`Unknown tool: ${input}`));
|
|
117
|
+
console.error(chalk_1.default.dim(`Valid tools: ${permissions_1.ALL_TOOL_NAMES.join(', ')}`));
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
return match;
|
|
121
|
+
}
|
|
122
|
+
async function enableCommand(toolName) {
|
|
123
|
+
const tool = resolveToolName(toolName);
|
|
124
|
+
if (!tool) {
|
|
125
|
+
process.exitCode = 1;
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
(0, permissions_1.setToolPermission)(tool, true);
|
|
129
|
+
console.log(chalk_1.default.green(`✓ ${tool} enabled`));
|
|
130
|
+
}
|
|
131
|
+
async function disableCommand(toolName) {
|
|
132
|
+
const tool = resolveToolName(toolName);
|
|
133
|
+
if (!tool) {
|
|
134
|
+
process.exitCode = 1;
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
(0, permissions_1.setToolPermission)(tool, false);
|
|
138
|
+
console.log(chalk_1.default.yellow(`✗ ${tool} disabled`));
|
|
139
|
+
}
|
|
140
|
+
// ─── Entry point ──────────────────────────────────────────────────────────────
|
|
141
|
+
async function permissionCommand(argv) {
|
|
142
|
+
const sub = argv[0];
|
|
143
|
+
// No subcommand → interactive TUI
|
|
144
|
+
if (!sub) {
|
|
145
|
+
await interactiveMode();
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (sub === 'list') {
|
|
149
|
+
printList();
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (sub === 'enable') {
|
|
153
|
+
const tool = argv[1];
|
|
154
|
+
if (!tool) {
|
|
155
|
+
console.error(chalk_1.default.red('Usage: redai permission enable <tool>'));
|
|
156
|
+
process.exitCode = 1;
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
await enableCommand(tool);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (sub === 'disable') {
|
|
163
|
+
const tool = argv[1];
|
|
164
|
+
if (!tool) {
|
|
165
|
+
console.error(chalk_1.default.red('Usage: redai permission disable <tool>'));
|
|
166
|
+
process.exitCode = 1;
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
await disableCommand(tool);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
console.error(chalk_1.default.red(`Unknown subcommand: ${sub}`));
|
|
173
|
+
console.error(chalk_1.default.dim('Usage: redai permission [list | enable <tool> | disable <tool>]'));
|
|
174
|
+
process.exitCode = 1;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=permission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission.js","sourceRoot":"","sources":["../../../src/cli/commands/permission.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -9,12 +9,16 @@ const config_1 = require("../config");
|
|
|
9
9
|
const login_1 = require("./commands/login");
|
|
10
10
|
const logout_1 = require("./commands/logout");
|
|
11
11
|
const oauth_1 = require("./commands/oauth");
|
|
12
|
+
const mcp_1 = require("./commands/mcp");
|
|
13
|
+
const ask_1 = require("./commands/ask");
|
|
14
|
+
const permission_1 = require("./commands/permission");
|
|
12
15
|
const serve_1 = require("./commands/serve");
|
|
13
16
|
const start_1 = require("./commands/start");
|
|
14
17
|
const status_1 = require("./commands/status");
|
|
15
18
|
function parseArgs(argv) {
|
|
16
19
|
const args = argv.slice(2);
|
|
17
|
-
|
|
20
|
+
// No argument → enter interactive shell
|
|
21
|
+
const command = args[0] ?? '__shell__';
|
|
18
22
|
const flags = {};
|
|
19
23
|
for (let i = 1; i < args.length; i++) {
|
|
20
24
|
const token = args[i];
|
|
@@ -36,6 +40,7 @@ function printHelp() {
|
|
|
36
40
|
console.log(`${chalk_1.default.cyan('redai')} ${chalk_1.default.dim(`v${config_1.CLI_VERSION}`)}`);
|
|
37
41
|
console.log();
|
|
38
42
|
console.log('Usage:');
|
|
43
|
+
console.log(' redai Enter RedAI interactive shell');
|
|
39
44
|
console.log(' redai login [--env dev|prod] [--api-key <k>] [--api-url <url>] Login RedAI');
|
|
40
45
|
console.log(' redai status Show current login + capabilities');
|
|
41
46
|
console.log(' redai start Connect WS, keep tools online');
|
|
@@ -58,12 +63,31 @@ function printHelp() {
|
|
|
58
63
|
console.log(' redai oauth list List all OAuth accounts');
|
|
59
64
|
console.log(' redai oauth logout <provider> [<account>] Remove a provider login');
|
|
60
65
|
console.log();
|
|
66
|
+
console.log();
|
|
67
|
+
console.log('MCP servers:');
|
|
68
|
+
console.log(' redai mcp list List configured MCP servers and their tools');
|
|
69
|
+
console.log(' redai mcp add [server] Add MCP server from catalog (interactive or by name)');
|
|
70
|
+
console.log(' redai mcp remove <server> Remove a configured MCP server');
|
|
71
|
+
console.log(' redai mcp test <server> Ping an MCP server, verify tools available');
|
|
72
|
+
console.log();
|
|
73
|
+
console.log('Local permissions:');
|
|
74
|
+
console.log(' redai permission list Show all tools and their enabled/disabled status');
|
|
75
|
+
console.log(' redai permission enable <tool> Allow a tool to run on this machine');
|
|
76
|
+
console.log(' redai permission disable <tool> Block a tool from running on this machine');
|
|
77
|
+
console.log();
|
|
61
78
|
console.log(' redai help Show this help');
|
|
62
79
|
}
|
|
63
80
|
async function main() {
|
|
64
81
|
const { command, flags } = parseArgs(process.argv);
|
|
65
82
|
try {
|
|
66
83
|
switch (command) {
|
|
84
|
+
// No command → enter RedAI interactive shell
|
|
85
|
+
case '__shell__':
|
|
86
|
+
await (0, ask_1.askCommand)();
|
|
87
|
+
return;
|
|
88
|
+
case 'ask':
|
|
89
|
+
await (0, ask_1.askCommand)();
|
|
90
|
+
return;
|
|
67
91
|
case 'login':
|
|
68
92
|
await (0, login_1.loginCommand)({
|
|
69
93
|
env: typeof flags['env'] === 'string' ? flags['env'] : undefined,
|
|
@@ -116,12 +140,53 @@ async function main() {
|
|
|
116
140
|
});
|
|
117
141
|
return;
|
|
118
142
|
}
|
|
143
|
+
case 'permission': {
|
|
144
|
+
await (0, permission_1.permissionCommand)(process.argv.slice(3));
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
case 'mcp': {
|
|
148
|
+
const sub = process.argv[3];
|
|
149
|
+
if (!sub || sub === 'list') {
|
|
150
|
+
await (0, mcp_1.mcpListCommand)();
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (sub === 'add') {
|
|
154
|
+
const server = process.argv[4];
|
|
155
|
+
await (0, mcp_1.mcpAddCommand)(server);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (sub === 'remove') {
|
|
159
|
+
const server = process.argv[4];
|
|
160
|
+
if (!server) {
|
|
161
|
+
console.error(chalk_1.default.red('Usage: redai mcp remove <server>'));
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
await (0, mcp_1.mcpRemoveCommand)(server);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
if (sub === 'test') {
|
|
168
|
+
const server = process.argv[4];
|
|
169
|
+
if (!server) {
|
|
170
|
+
console.error(chalk_1.default.red('Usage: redai mcp test <server>'));
|
|
171
|
+
process.exit(1);
|
|
172
|
+
}
|
|
173
|
+
await (0, mcp_1.mcpTestCommand)(server);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
console.error(chalk_1.default.red(`Unknown mcp subcommand: ${sub}`));
|
|
177
|
+
console.error(chalk_1.default.dim('Usage: redai mcp [list|add|remove|test]'));
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
119
180
|
case 'help':
|
|
120
181
|
case '--help':
|
|
121
182
|
case '-h':
|
|
122
|
-
default:
|
|
123
183
|
printHelp();
|
|
124
184
|
return;
|
|
185
|
+
default:
|
|
186
|
+
console.error(chalk_1.default.red(`Unknown command: ${command}`));
|
|
187
|
+
console.error(chalk_1.default.dim('Run `redai help` to see available commands.'));
|
|
188
|
+
process.exitCode = 1;
|
|
189
|
+
return;
|
|
125
190
|
}
|
|
126
191
|
}
|
|
127
192
|
catch (err) {
|
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,4CAAgD;AAChD,4CAAgD;AAChD,8CAAkD;AAOlD,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.detectCapabilities = detectCapabilities;
|
|
4
4
|
const child_process_1 = require("child_process");
|
|
5
5
|
const store_1 = require("../llm/oauth/store");
|
|
6
|
+
const config_1 = require("../mcp/config");
|
|
6
7
|
/**
|
|
7
8
|
* Detect AI-Agent CLI có sẵn trên máy. Trả:
|
|
8
9
|
* - capabilities: tổng hợp gồm 3 nhóm:
|
|
@@ -37,6 +38,11 @@ function detectCapabilities() {
|
|
|
37
38
|
capabilities.push(`llm-${provider}`);
|
|
38
39
|
}
|
|
39
40
|
}
|
|
41
|
+
// (4) MCP capabilities — phụ thuộc ~/.redai/mcp.json
|
|
42
|
+
const mcpServers = (0, config_1.loadMcpConfig)();
|
|
43
|
+
for (const serverName of Object.keys(mcpServers)) {
|
|
44
|
+
capabilities.push(`mcp-${serverName}`);
|
|
45
|
+
}
|
|
40
46
|
return { capabilities, cliDetected };
|
|
41
47
|
}
|
|
42
48
|
function sniffVersion(binary) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/cli-router/detect.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/cli-router/detect.ts"],"names":[],"mappings":";;AAaA,gDAuCC;AApDD,iDAA0C;AAE1C,8CAAkD;AAClD,0CAA8C;AAE9C;;;;;;;GAOG;AACH,SAAgB,kBAAkB;IAIhC,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,UAAU,GAAG,IAAA,sBAAa,GAAE,CAAC;IACnC,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,YAAY,CAAC,IAAI,CAAC,OAAO,UAAU,EAAgB,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AACvC,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.9";
|
|
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
|
@@ -10,6 +10,7 @@ const socket_io_client_1 = require("socket.io-client");
|
|
|
10
10
|
const cli_protocol_1 = require("@redonvn/cli-protocol");
|
|
11
11
|
const config_1 = require("../config");
|
|
12
12
|
const detect_1 = require("../cli-router/detect");
|
|
13
|
+
const client_1 = require("../mcp/client");
|
|
13
14
|
const router_1 = require("./router");
|
|
14
15
|
let activeSocket = null;
|
|
15
16
|
let heartbeatTimer = null;
|
|
@@ -151,6 +152,7 @@ async function shutdown(code) {
|
|
|
151
152
|
}
|
|
152
153
|
activeSocket = null;
|
|
153
154
|
}
|
|
155
|
+
await client_1.mcpClientPool.shutdown();
|
|
154
156
|
process.exit(code);
|
|
155
157
|
}
|
|
156
158
|
//# sourceMappingURL=tunnel.js.map
|
|
@@ -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 { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Singleton pool giữ kết nối MCP client cho từng server.
|
|
4
|
+
* Lazy spawn — chỉ connect khi có tool call đầu tiên đến server đó.
|
|
5
|
+
* Auto-reconnect: nếu transport bị đóng, xóa khỏi pool → lần sau sẽ spawn lại.
|
|
6
|
+
*/
|
|
7
|
+
declare class McpClientPool {
|
|
8
|
+
private pool;
|
|
9
|
+
getClient(serverName: string): Promise<Client>;
|
|
10
|
+
shutdown(): Promise<void>;
|
|
11
|
+
listConnected(): string[];
|
|
12
|
+
}
|
|
13
|
+
export declare const mcpClientPool: McpClientPool;
|
|
14
|
+
export {};
|