helix-assistant-cli 0.2.7 → 0.2.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/client/agent-client.d.ts +1 -0
- package/dist/client/agent-client.js +3 -0
- package/dist/commands/diagnostics.d.ts +4 -0
- package/dist/commands/diagnostics.js +47 -0
- package/dist/commands/mcp.d.ts +1 -0
- package/dist/commands/mcp.js +10 -0
- package/dist/config/mcp-defaults.d.ts +10 -0
- package/dist/config/mcp-defaults.js +12 -0
- package/dist/index.js +1 -1
- package/dist/ui/autocomplete.js +4 -1
- package/dist/ui/repl.js +14 -1
- package/package.json +1 -1
- package/src/client/agent-client.ts +4 -0
- package/src/commands/diagnostics.ts +38 -0
- package/src/commands/mcp.ts +10 -0
- package/src/config/mcp-defaults.ts +18 -0
- package/src/index.ts +1 -1
- package/src/ui/autocomplete.ts +4 -1
- package/src/ui/repl.ts +16 -2
|
@@ -42,6 +42,7 @@ export declare class AgentClient extends EventEmitter {
|
|
|
42
42
|
getProviders(): Promise<ProviderSummary[]>;
|
|
43
43
|
getModels(requirements?: Record<string, unknown>): Promise<ModelSummary[]>;
|
|
44
44
|
getSettings(): Promise<HelixSettings>;
|
|
45
|
+
getCapabilities(): Promise<Record<string, unknown>>;
|
|
45
46
|
saveSettings(settings: Partial<HelixSettings>): Promise<HelixSettings>;
|
|
46
47
|
validateKey(provider: string, slot: number, key: string): Promise<string>;
|
|
47
48
|
getSkills(): Promise<SkillSummary[]>;
|
|
@@ -265,6 +265,9 @@ class AgentClient extends events_1.EventEmitter {
|
|
|
265
265
|
async getSettings() {
|
|
266
266
|
return this.request('GET_SETTINGS', {});
|
|
267
267
|
}
|
|
268
|
+
async getCapabilities() {
|
|
269
|
+
return this.request('GET_CAPABILITIES', {});
|
|
270
|
+
}
|
|
268
271
|
async saveSettings(settings) {
|
|
269
272
|
return this.request('SAVE_SETTINGS', { settings });
|
|
270
273
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AgentClient } from '../client/agent-client';
|
|
2
|
+
export declare function handleProviders(client: AgentClient): Promise<void>;
|
|
3
|
+
export declare function handleCapabilities(client: AgentClient): Promise<void>;
|
|
4
|
+
export declare function handleSettings(client: AgentClient): Promise<void>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleProviders = handleProviders;
|
|
4
|
+
exports.handleCapabilities = handleCapabilities;
|
|
5
|
+
exports.handleSettings = handleSettings;
|
|
6
|
+
const colors_1 = require("../ui/colors");
|
|
7
|
+
async function handleProviders(client) {
|
|
8
|
+
try {
|
|
9
|
+
const providers = await client.getProviders();
|
|
10
|
+
console.log(`\n${(0, colors_1.BOLD)('🧠 Proveedores configurados:')}\n`);
|
|
11
|
+
for (const provider of providers) {
|
|
12
|
+
const state = provider.configured ? (0, colors_1.GREEN)('configurado') : (0, colors_1.GRAY)('sin clave');
|
|
13
|
+
console.log(` ${(0, colors_1.CYAN)(provider.name || provider.id)} [${state}] ${(0, colors_1.DIM)(`${provider.models_available} modelos`)}`);
|
|
14
|
+
for (const key of provider.keys || []) {
|
|
15
|
+
console.log(` ${(0, colors_1.DIM)(`slot ${key.slot}:`)} ${key.configured ? (0, colors_1.GREEN)(key.health) : (0, colors_1.GRAY)('vacío')} ${key.masked || ''}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
console.log('');
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
console.log((0, colors_1.RED)(` Error consultando proveedores: ${err.message}\n`));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
async function handleCapabilities(client) {
|
|
25
|
+
try {
|
|
26
|
+
const caps = await client.getCapabilities();
|
|
27
|
+
console.log(`\n${(0, colors_1.BOLD)('⚙ Capacidades activas:')}\n`);
|
|
28
|
+
for (const [key, value] of Object.entries(caps)) {
|
|
29
|
+
const rendered = typeof value === 'boolean' ? (value ? (0, colors_1.GREEN)('activo') : (0, colors_1.YELLOW)('inactivo')) : (0, colors_1.CYAN)(String(value));
|
|
30
|
+
console.log(` ${(0, colors_1.DIM)(key.padEnd(24))} ${rendered}`);
|
|
31
|
+
}
|
|
32
|
+
console.log('');
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
console.log((0, colors_1.RED)(` Error consultando capacidades: ${err.message}\n`));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function handleSettings(client) {
|
|
39
|
+
try {
|
|
40
|
+
const settings = await client.getSettings();
|
|
41
|
+
const safe = Object.fromEntries(Object.entries(settings).filter(([key]) => !/key|token|secret|password|auth/i.test(key)));
|
|
42
|
+
console.log(`\n${(0, colors_1.BOLD)('📋 Configuración efectiva (sin secretos):')}\n${JSON.stringify(safe, null, 2)}\n`);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
console.log((0, colors_1.RED)(` Error consultando configuración: ${err.message}\n`));
|
|
46
|
+
}
|
|
47
|
+
}
|
package/dist/commands/mcp.d.ts
CHANGED
package/dist/commands/mcp.js
CHANGED
|
@@ -3,11 +3,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.handleMcpDefaults = handleMcpDefaults;
|
|
6
7
|
exports.handleListMcp = handleListMcp;
|
|
7
8
|
exports.handleCreateMcp = handleCreateMcp;
|
|
8
9
|
const prompts_1 = __importDefault(require("prompts"));
|
|
9
10
|
const chalk_1 = __importDefault(require("chalk"));
|
|
10
11
|
const colors_1 = require("../ui/colors");
|
|
12
|
+
const mcp_defaults_1 = require("../config/mcp-defaults");
|
|
13
|
+
function handleMcpDefaults() {
|
|
14
|
+
console.log(`\n${(0, colors_1.BOLD)('📦 MCPs recomendados (catálogo, no activados automáticamente):')}\n`);
|
|
15
|
+
for (const item of mcp_defaults_1.MCP_DEFAULTS) {
|
|
16
|
+
console.log(` ${(0, colors_1.CYAN_BOLD)('◈')} ${(0, colors_1.formatMcp)(item.id)} — ${item.label}`);
|
|
17
|
+
console.log(` ${(0, colors_1.DIM)(item.purpose)} | ${item.activation} | ${item.privacy}`);
|
|
18
|
+
}
|
|
19
|
+
console.log((0, colors_1.DIM)('\nActiva cada MCP individualmente con consentimiento y alcance explícito.\n'));
|
|
20
|
+
}
|
|
11
21
|
async function handleListMcp(client) {
|
|
12
22
|
console.log(`\n${(0, colors_1.BOLD)('🔌 Servidores y Herramientas MCP:')}\n`);
|
|
13
23
|
try {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface McpDefaultDefinition {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
purpose: string;
|
|
5
|
+
transport: 'stdio' | 'connector';
|
|
6
|
+
activation: 'local-opt-in' | 'oauth-opt-in';
|
|
7
|
+
privacy: string;
|
|
8
|
+
}
|
|
9
|
+
/** Catalog only: entries are never enabled or installed automatically. */
|
|
10
|
+
export declare const MCP_DEFAULTS: McpDefaultDefinition[];
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MCP_DEFAULTS = void 0;
|
|
4
|
+
/** Catalog only: entries are never enabled or installed automatically. */
|
|
5
|
+
exports.MCP_DEFAULTS = [
|
|
6
|
+
{ id: 'filesystem', label: 'Archivos locales', purpose: 'Carpeta elegida por el usuario', transport: 'stdio', activation: 'local-opt-in', privacy: 'Solo rutas autorizadas' },
|
|
7
|
+
{ id: 'obsidian', label: 'Obsidian / Helix Vault', purpose: 'Leer y gestionar una bóveda concreta', transport: 'stdio', activation: 'local-opt-in', privacy: 'Solo la bóveda seleccionada' },
|
|
8
|
+
{ id: 'vscode', label: 'VS Code', purpose: 'Trabajar con el workspace seleccionado', transport: 'stdio', activation: 'local-opt-in', privacy: 'Solo el workspace seleccionado' },
|
|
9
|
+
{ id: 'github', label: 'GitHub', purpose: 'Repositorios, issues y pull requests', transport: 'stdio', activation: 'oauth-opt-in', privacy: 'Requiere token u OAuth del usuario' },
|
|
10
|
+
{ id: 'gmail', label: 'Gmail', purpose: 'Correo y búsqueda de mensajes', transport: 'connector', activation: 'oauth-opt-in', privacy: 'Requiere OAuth explícito del usuario' },
|
|
11
|
+
{ id: 'notion', label: 'Notion', purpose: 'Páginas y bases de datos', transport: 'connector', activation: 'oauth-opt-in', privacy: 'Requiere integración autorizada' },
|
|
12
|
+
];
|
package/dist/index.js
CHANGED
|
@@ -70,7 +70,7 @@ const program = new commander_1.Command();
|
|
|
70
70
|
program
|
|
71
71
|
.name('helix')
|
|
72
72
|
.description('HELIX - Interactive Terminal CLI for Windows AI Desktop Agent')
|
|
73
|
-
.version('0.2.
|
|
73
|
+
.version('0.2.9')
|
|
74
74
|
.option('-u, --ws-url <url>', 'URL del servidor WebSocket del agente', (0, env_1.getWsUrl)())
|
|
75
75
|
.option('-t, --token <token>', 'Token de autenticación WebSocket de HELIX', (0, env_1.getWsToken)())
|
|
76
76
|
.option('--plain', 'Desactivar formato enriquecido de Markdown y mostrar texto plano sin asteriscos')
|
package/dist/ui/autocomplete.js
CHANGED
|
@@ -10,7 +10,7 @@ const user_skill_discovery_1 = require("../skills/user-skill-discovery");
|
|
|
10
10
|
exports.SLASH_COMMANDS = [
|
|
11
11
|
{ command: '/create-skill', description: 'Crear una nueva skill interactiva para HELIX' },
|
|
12
12
|
{ command: '/skill', description: 'Listar o inspeccionar skills registradas', usage: '/skill [nombre]' },
|
|
13
|
-
{ command: '/mcp', description: 'Listar servidores MCP y sus herramientas' },
|
|
13
|
+
{ command: '/mcp', description: 'Listar servidores MCP y sus herramientas', usage: '/mcp [defaults]' },
|
|
14
14
|
{ command: '/create-mcp', description: 'Registrar y configurar un nuevo servidor MCP' },
|
|
15
15
|
{ command: '/browser', description: 'Ver estado del navegador web o abrir URLs', usage: '/browser [open <url>]' },
|
|
16
16
|
{ command: '/config-apikey', description: 'Configurador interactivo de API Keys (OpenAI, Anthropic, Gemini, etc.)' },
|
|
@@ -19,6 +19,9 @@ exports.SLASH_COMMANDS = [
|
|
|
19
19
|
{ command: '/tasks', description: 'Ver tareas activas y recientes del agente' },
|
|
20
20
|
{ command: '/models', description: 'Listar modelos disponibles de proveedores configurados' },
|
|
21
21
|
{ command: '/status', description: 'Mostrar resumen del estado del sistema' },
|
|
22
|
+
{ command: '/providers', description: 'Ver proveedores configurados y salud de sus claves' },
|
|
23
|
+
{ command: '/capabilities', description: 'Ver capacidades activas: sandbox, subagentes, voz y browser' },
|
|
24
|
+
{ command: '/settings', description: 'Ver configuración efectiva sin exponer secretos' },
|
|
22
25
|
{ command: '/clear', description: 'Limpiar pantalla y restaurar el banner de HELIX' },
|
|
23
26
|
{ command: '/stop', description: 'Parada de emergencia de todas las tareas activas' },
|
|
24
27
|
{ command: '/help', description: 'Mostrar ayuda de comandos y atajos' },
|
package/dist/ui/repl.js
CHANGED
|
@@ -17,6 +17,7 @@ const mcp_1 = require("../commands/mcp");
|
|
|
17
17
|
const mic_1 = require("../commands/mic");
|
|
18
18
|
const browser_1 = require("../commands/browser");
|
|
19
19
|
const markdown_1 = require("./markdown");
|
|
20
|
+
const diagnostics_1 = require("../commands/diagnostics");
|
|
20
21
|
class HelixRepl {
|
|
21
22
|
options;
|
|
22
23
|
rl = null;
|
|
@@ -316,7 +317,10 @@ class HelixRepl {
|
|
|
316
317
|
}
|
|
317
318
|
break;
|
|
318
319
|
case '/mcp':
|
|
319
|
-
|
|
320
|
+
if (args?.trim().toLowerCase() === 'defaults')
|
|
321
|
+
(0, mcp_1.handleMcpDefaults)();
|
|
322
|
+
else
|
|
323
|
+
await (0, mcp_1.handleListMcp)(this.client);
|
|
320
324
|
break;
|
|
321
325
|
case '/create-mcp':
|
|
322
326
|
this.rl?.pause();
|
|
@@ -351,6 +355,15 @@ class HelixRepl {
|
|
|
351
355
|
case '/status':
|
|
352
356
|
await this._handleStatus();
|
|
353
357
|
break;
|
|
358
|
+
case '/providers':
|
|
359
|
+
await (0, diagnostics_1.handleProviders)(this.client);
|
|
360
|
+
break;
|
|
361
|
+
case '/capabilities':
|
|
362
|
+
await (0, diagnostics_1.handleCapabilities)(this.client);
|
|
363
|
+
break;
|
|
364
|
+
case '/settings':
|
|
365
|
+
await (0, diagnostics_1.handleSettings)(this.client);
|
|
366
|
+
break;
|
|
354
367
|
case '/stop':
|
|
355
368
|
console.log((0, colors_1.RED_BOLD)('\n[PARADA DE EMERGENCIA]: Cancelando todas las tareas activas...'));
|
|
356
369
|
this.client.emergencyStop();
|
package/package.json
CHANGED
|
@@ -319,6 +319,10 @@ export class AgentClient extends EventEmitter {
|
|
|
319
319
|
return this.request<HelixSettings>('GET_SETTINGS', {});
|
|
320
320
|
}
|
|
321
321
|
|
|
322
|
+
public async getCapabilities(): Promise<Record<string, unknown>> {
|
|
323
|
+
return this.request<Record<string, unknown>>('GET_CAPABILITIES', {});
|
|
324
|
+
}
|
|
325
|
+
|
|
322
326
|
public async saveSettings(settings: Partial<HelixSettings>): Promise<HelixSettings> {
|
|
323
327
|
return this.request<HelixSettings>('SAVE_SETTINGS', { settings });
|
|
324
328
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import type { AgentClient } from '../client/agent-client';
|
|
3
|
+
import { BOLD, CYAN, DIM, GREEN, GRAY, RED, YELLOW } from '../ui/colors';
|
|
4
|
+
|
|
5
|
+
export async function handleProviders(client: AgentClient): Promise<void> {
|
|
6
|
+
try {
|
|
7
|
+
const providers = await client.getProviders();
|
|
8
|
+
console.log(`\n${BOLD('🧠 Proveedores configurados:')}\n`);
|
|
9
|
+
for (const provider of providers) {
|
|
10
|
+
const state = provider.configured ? GREEN('configurado') : GRAY('sin clave');
|
|
11
|
+
console.log(` ${CYAN(provider.name || provider.id)} [${state}] ${DIM(`${provider.models_available} modelos`)}`);
|
|
12
|
+
for (const key of provider.keys || []) {
|
|
13
|
+
console.log(` ${DIM(`slot ${key.slot}:`)} ${key.configured ? GREEN(key.health) : GRAY('vacío')} ${key.masked || ''}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
console.log('');
|
|
17
|
+
} catch (err) { console.log(RED(` Error consultando proveedores: ${(err as Error).message}\n`)); }
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export async function handleCapabilities(client: AgentClient): Promise<void> {
|
|
21
|
+
try {
|
|
22
|
+
const caps = await client.getCapabilities();
|
|
23
|
+
console.log(`\n${BOLD('⚙ Capacidades activas:')}\n`);
|
|
24
|
+
for (const [key, value] of Object.entries(caps)) {
|
|
25
|
+
const rendered = typeof value === 'boolean' ? (value ? GREEN('activo') : YELLOW('inactivo')) : CYAN(String(value));
|
|
26
|
+
console.log(` ${DIM(key.padEnd(24))} ${rendered}`);
|
|
27
|
+
}
|
|
28
|
+
console.log('');
|
|
29
|
+
} catch (err) { console.log(RED(` Error consultando capacidades: ${(err as Error).message}\n`)); }
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export async function handleSettings(client: AgentClient): Promise<void> {
|
|
33
|
+
try {
|
|
34
|
+
const settings = await client.getSettings();
|
|
35
|
+
const safe = Object.fromEntries(Object.entries(settings).filter(([key]) => !/key|token|secret|password|auth/i.test(key)));
|
|
36
|
+
console.log(`\n${BOLD('📋 Configuración efectiva (sin secretos):')}\n${JSON.stringify(safe, null, 2)}\n`);
|
|
37
|
+
} catch (err) { console.log(RED(` Error consultando configuración: ${(err as Error).message}\n`)); }
|
|
38
|
+
}
|
package/src/commands/mcp.ts
CHANGED
|
@@ -3,6 +3,16 @@ import chalk from 'chalk';
|
|
|
3
3
|
import type { AgentClient } from '../client/agent-client';
|
|
4
4
|
import type { McpServerConfig } from '../client/types';
|
|
5
5
|
import { formatMcp, CYAN_BOLD, GREEN, RED, YELLOW, GRAY, BOLD, DIM } from '../ui/colors';
|
|
6
|
+
import { MCP_DEFAULTS } from '../config/mcp-defaults';
|
|
7
|
+
|
|
8
|
+
export function handleMcpDefaults(): void {
|
|
9
|
+
console.log(`\n${BOLD('📦 MCPs recomendados (catálogo, no activados automáticamente):')}\n`);
|
|
10
|
+
for (const item of MCP_DEFAULTS) {
|
|
11
|
+
console.log(` ${CYAN_BOLD('◈')} ${formatMcp(item.id)} — ${item.label}`);
|
|
12
|
+
console.log(` ${DIM(item.purpose)} | ${item.activation} | ${item.privacy}`);
|
|
13
|
+
}
|
|
14
|
+
console.log(DIM('\nActiva cada MCP individualmente con consentimiento y alcance explícito.\n'));
|
|
15
|
+
}
|
|
6
16
|
|
|
7
17
|
export async function handleListMcp(client: AgentClient): Promise<void> {
|
|
8
18
|
console.log(`\n${BOLD('🔌 Servidores y Herramientas MCP:')}\n`);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface McpDefaultDefinition {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
purpose: string;
|
|
5
|
+
transport: 'stdio' | 'connector';
|
|
6
|
+
activation: 'local-opt-in' | 'oauth-opt-in';
|
|
7
|
+
privacy: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** Catalog only: entries are never enabled or installed automatically. */
|
|
11
|
+
export const MCP_DEFAULTS: McpDefaultDefinition[] = [
|
|
12
|
+
{ id: 'filesystem', label: 'Archivos locales', purpose: 'Carpeta elegida por el usuario', transport: 'stdio', activation: 'local-opt-in', privacy: 'Solo rutas autorizadas' },
|
|
13
|
+
{ id: 'obsidian', label: 'Obsidian / Helix Vault', purpose: 'Leer y gestionar una bóveda concreta', transport: 'stdio', activation: 'local-opt-in', privacy: 'Solo la bóveda seleccionada' },
|
|
14
|
+
{ id: 'vscode', label: 'VS Code', purpose: 'Trabajar con el workspace seleccionado', transport: 'stdio', activation: 'local-opt-in', privacy: 'Solo el workspace seleccionado' },
|
|
15
|
+
{ id: 'github', label: 'GitHub', purpose: 'Repositorios, issues y pull requests', transport: 'stdio', activation: 'oauth-opt-in', privacy: 'Requiere token u OAuth del usuario' },
|
|
16
|
+
{ id: 'gmail', label: 'Gmail', purpose: 'Correo y búsqueda de mensajes', transport: 'connector', activation: 'oauth-opt-in', privacy: 'Requiere OAuth explícito del usuario' },
|
|
17
|
+
{ id: 'notion', label: 'Notion', purpose: 'Páginas y bases de datos', transport: 'connector', activation: 'oauth-opt-in', privacy: 'Requiere integración autorizada' },
|
|
18
|
+
];
|
package/src/index.ts
CHANGED
|
@@ -73,7 +73,7 @@ const program = new Command();
|
|
|
73
73
|
program
|
|
74
74
|
.name('helix')
|
|
75
75
|
.description('HELIX - Interactive Terminal CLI for Windows AI Desktop Agent')
|
|
76
|
-
.version('0.2.
|
|
76
|
+
.version('0.2.9')
|
|
77
77
|
.option('-u, --ws-url <url>', 'URL del servidor WebSocket del agente', getWsUrl())
|
|
78
78
|
.option('-t, --token <token>', 'Token de autenticación WebSocket de HELIX', getWsToken())
|
|
79
79
|
.option('--plain', 'Desactivar formato enriquecido de Markdown y mostrar texto plano sin asteriscos')
|
package/src/ui/autocomplete.ts
CHANGED
|
@@ -12,7 +12,7 @@ export interface CommandDefinition {
|
|
|
12
12
|
export const SLASH_COMMANDS: CommandDefinition[] = [
|
|
13
13
|
{ command: '/create-skill', description: 'Crear una nueva skill interactiva para HELIX' },
|
|
14
14
|
{ command: '/skill', description: 'Listar o inspeccionar skills registradas', usage: '/skill [nombre]' },
|
|
15
|
-
{ command: '/mcp', description: 'Listar servidores MCP y sus herramientas' },
|
|
15
|
+
{ command: '/mcp', description: 'Listar servidores MCP y sus herramientas', usage: '/mcp [defaults]' },
|
|
16
16
|
{ command: '/create-mcp', description: 'Registrar y configurar un nuevo servidor MCP' },
|
|
17
17
|
{ command: '/browser', description: 'Ver estado del navegador web o abrir URLs', usage: '/browser [open <url>]' },
|
|
18
18
|
{ command: '/config-apikey', description: 'Configurador interactivo de API Keys (OpenAI, Anthropic, Gemini, etc.)' },
|
|
@@ -21,6 +21,9 @@ export const SLASH_COMMANDS: CommandDefinition[] = [
|
|
|
21
21
|
{ command: '/tasks', description: 'Ver tareas activas y recientes del agente' },
|
|
22
22
|
{ command: '/models', description: 'Listar modelos disponibles de proveedores configurados' },
|
|
23
23
|
{ command: '/status', description: 'Mostrar resumen del estado del sistema' },
|
|
24
|
+
{ command: '/providers', description: 'Ver proveedores configurados y salud de sus claves' },
|
|
25
|
+
{ command: '/capabilities', description: 'Ver capacidades activas: sandbox, subagentes, voz y browser' },
|
|
26
|
+
{ command: '/settings', description: 'Ver configuración efectiva sin exponer secretos' },
|
|
24
27
|
{ command: '/clear', description: 'Limpiar pantalla y restaurar el banner de HELIX' },
|
|
25
28
|
{ command: '/stop', description: 'Parada de emergencia de todas las tareas activas' },
|
|
26
29
|
{ command: '/help', description: 'Mostrar ayuda de comandos y atajos' },
|
package/src/ui/repl.ts
CHANGED
|
@@ -21,11 +21,12 @@ import {
|
|
|
21
21
|
} from './colors';
|
|
22
22
|
import { handleConfigApiKey, handleShowApiKey } from '../commands/apikey';
|
|
23
23
|
import { handleCreateSkill, handleListSkills } from '../commands/skills';
|
|
24
|
-
import { handleCreateMcp, handleListMcp } from '../commands/mcp';
|
|
24
|
+
import { handleCreateMcp, handleListMcp, handleMcpDefaults } from '../commands/mcp';
|
|
25
25
|
import { handleMicrophoneCommand } from '../commands/mic';
|
|
26
26
|
import { handleBrowserCommand } from '../commands/browser';
|
|
27
27
|
import type { ConfirmationRequest } from '../client/types';
|
|
28
28
|
import { formatTerminalMarkdown } from './markdown';
|
|
29
|
+
import { handleCapabilities, handleProviders, handleSettings } from '../commands/diagnostics';
|
|
29
30
|
|
|
30
31
|
export interface ReplOptions {
|
|
31
32
|
wsUrl: string;
|
|
@@ -359,7 +360,8 @@ export class HelixRepl {
|
|
|
359
360
|
break;
|
|
360
361
|
|
|
361
362
|
case '/mcp':
|
|
362
|
-
|
|
363
|
+
if (args?.trim().toLowerCase() === 'defaults') handleMcpDefaults();
|
|
364
|
+
else await handleListMcp(this.client);
|
|
363
365
|
break;
|
|
364
366
|
|
|
365
367
|
case '/create-mcp':
|
|
@@ -397,6 +399,18 @@ export class HelixRepl {
|
|
|
397
399
|
await this._handleStatus();
|
|
398
400
|
break;
|
|
399
401
|
|
|
402
|
+
case '/providers':
|
|
403
|
+
await handleProviders(this.client);
|
|
404
|
+
break;
|
|
405
|
+
|
|
406
|
+
case '/capabilities':
|
|
407
|
+
await handleCapabilities(this.client);
|
|
408
|
+
break;
|
|
409
|
+
|
|
410
|
+
case '/settings':
|
|
411
|
+
await handleSettings(this.client);
|
|
412
|
+
break;
|
|
413
|
+
|
|
400
414
|
case '/stop':
|
|
401
415
|
console.log(RED_BOLD('\n[PARADA DE EMERGENCIA]: Cancelando todas las tareas activas...'));
|
|
402
416
|
this.client.emergencyStop();
|