repomap-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analyzer/imports-analyzer.d.ts +27 -0
- package/dist/analyzer/imports-analyzer.d.ts.map +1 -0
- package/dist/analyzer/imports-analyzer.js +74 -0
- package/dist/analyzer/imports-analyzer.js.map +1 -0
- package/dist/analyzer/tree-sitter-analyzer.d.ts +37 -0
- package/dist/analyzer/tree-sitter-analyzer.d.ts.map +1 -0
- package/dist/analyzer/tree-sitter-analyzer.js +531 -0
- package/dist/analyzer/tree-sitter-analyzer.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +202 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +9 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +106 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/mcp.d.ts +4 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +511 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/snapshot.d.ts +8 -0
- package/dist/commands/snapshot.d.ts.map +1 -0
- package/dist/commands/snapshot.js +314 -0
- package/dist/commands/snapshot.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +108 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/watch.d.ts +5 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +367 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/generator/claude-md.d.ts +19 -0
- package/dist/generator/claude-md.d.ts.map +1 -0
- package/dist/generator/claude-md.js +656 -0
- package/dist/generator/claude-md.js.map +1 -0
- package/dist/generator/map-json.d.ts +35 -0
- package/dist/generator/map-json.d.ts.map +1 -0
- package/dist/generator/map-json.js +130 -0
- package/dist/generator/map-json.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/scanner/file-scanner.d.ts +9 -0
- package/dist/scanner/file-scanner.d.ts.map +1 -0
- package/dist/scanner/file-scanner.js +76 -0
- package/dist/scanner/file-scanner.js.map +1 -0
- package/dist/scanner/stack-detector.d.ts +10 -0
- package/dist/scanner/stack-detector.d.ts.map +1 -0
- package/dist/scanner/stack-detector.js +153 -0
- package/dist/scanner/stack-detector.js.map +1 -0
- package/dist/utils/credentials.d.ts +11 -0
- package/dist/utils/credentials.d.ts.map +1 -0
- package/dist/utils/credentials.js +34 -0
- package/dist/utils/credentials.js.map +1 -0
- package/dist/utils/health-score.d.ts +10 -0
- package/dist/utils/health-score.d.ts.map +1 -0
- package/dist/utils/health-score.js +44 -0
- package/dist/utils/health-score.js.map +1 -0
- package/dist/utils/ui.d.ts +14 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +45 -0
- package/dist/utils/ui.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import { input, confirm, select } from '@inquirer/prompts';
|
|
6
|
+
import { printBanner, healthBar, summaryBox, c } from '../utils/ui.js';
|
|
7
|
+
import { scanFiles } from '../scanner/file-scanner.js';
|
|
8
|
+
import { detectStack } from '../scanner/stack-detector.js';
|
|
9
|
+
import { initAnalyzer, analyzeFiles, isWasmAvailable } from '../analyzer/imports-analyzer.js';
|
|
10
|
+
import { generateClaudeMd, writeClaudeMd } from '../generator/claude-md.js';
|
|
11
|
+
import { generateMapJson, writeMapJson, detectModules } from '../generator/map-json.js';
|
|
12
|
+
import { calculateHealthScore } from '../utils/health-score.js';
|
|
13
|
+
import { loadCredentials } from '../utils/credentials.js';
|
|
14
|
+
const CONFIG_DIR = path.join(os.homedir(), '.repomap');
|
|
15
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
16
|
+
function loadConfig() {
|
|
17
|
+
try {
|
|
18
|
+
if (fs.existsSync(CONFIG_FILE)) {
|
|
19
|
+
return JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf-8'));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// ignore
|
|
24
|
+
}
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
function saveConfig(config) {
|
|
28
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
29
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf-8');
|
|
30
|
+
}
|
|
31
|
+
async function maybeShowConductorTip(appUrl) {
|
|
32
|
+
const creds = loadCredentials();
|
|
33
|
+
if (!creds)
|
|
34
|
+
return; // not authenticated
|
|
35
|
+
// Check user plan
|
|
36
|
+
try {
|
|
37
|
+
const res = await fetch(`${appUrl}/api/v1/user/plan`, {
|
|
38
|
+
headers: { Authorization: `Bearer ${creds.access_token}` },
|
|
39
|
+
});
|
|
40
|
+
if (!res.ok)
|
|
41
|
+
return;
|
|
42
|
+
const data = await res.json();
|
|
43
|
+
if (data.plan !== 'pro')
|
|
44
|
+
return; // only show for Pro (not Stack, not Free)
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return; // network error, skip tip
|
|
48
|
+
}
|
|
49
|
+
const config = loadConfig();
|
|
50
|
+
if (config.conductor_tip_shown)
|
|
51
|
+
return; // already shown
|
|
52
|
+
// Show the tip
|
|
53
|
+
console.log('\n ' + c.amber('💡') + ' ' + c.bold('Tip:') + ' Conecta Conductor para gestionar specs automáticamente.\n' +
|
|
54
|
+
' ' + c.dim('RepoMap + Conductor = contexto perfecto para cada tarea.') + '\n' +
|
|
55
|
+
' ' + c.dim('Más info: ') + c.cyan(`${appUrl}/integrations`));
|
|
56
|
+
// Mark as shown
|
|
57
|
+
saveConfig({ ...config, conductor_tip_shown: true });
|
|
58
|
+
}
|
|
59
|
+
// ExitPromptError is thrown when stdin closes or user presses Ctrl+C in @inquirer/prompts
|
|
60
|
+
class ExitPromptError extends Error {
|
|
61
|
+
}
|
|
62
|
+
function isExitPromptError(err) {
|
|
63
|
+
return (err instanceof Error &&
|
|
64
|
+
(err.constructor.name === 'ExitPromptError' || err.message.includes('force closed the prompt')));
|
|
65
|
+
}
|
|
66
|
+
function detectProjectName(rootDir) {
|
|
67
|
+
const pkgPath = path.join(rootDir, 'package.json');
|
|
68
|
+
if (fs.existsSync(pkgPath)) {
|
|
69
|
+
try {
|
|
70
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
71
|
+
if (pkg.name)
|
|
72
|
+
return pkg.name;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// ignore
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return path.basename(rootDir);
|
|
79
|
+
}
|
|
80
|
+
export async function runInit(options) {
|
|
81
|
+
const rootDir = path.resolve(options.path);
|
|
82
|
+
// ── Banner ──
|
|
83
|
+
printBanner();
|
|
84
|
+
// ── Wizard ──────────────────────────────────────────────────────────────────
|
|
85
|
+
const detectedName = detectProjectName(rootDir);
|
|
86
|
+
let projectName = detectedName;
|
|
87
|
+
let connectDashboard = false;
|
|
88
|
+
let isDeep = options.deep;
|
|
89
|
+
// Only show interactive prompts if stdin is a TTY
|
|
90
|
+
if (process.stdin.isTTY) {
|
|
91
|
+
try {
|
|
92
|
+
projectName = await input({
|
|
93
|
+
message: '¿Cómo se llama este proyecto?',
|
|
94
|
+
default: detectedName,
|
|
95
|
+
});
|
|
96
|
+
connectDashboard = await confirm({
|
|
97
|
+
message: '¿Quieres conectar con el dashboard?',
|
|
98
|
+
default: false,
|
|
99
|
+
});
|
|
100
|
+
const analysisMode = await select({
|
|
101
|
+
message: '¿Análisis rápido o profundo?',
|
|
102
|
+
choices: [
|
|
103
|
+
{ name: 'Rápido — top 500 archivos (recomendado)', value: 'fast' },
|
|
104
|
+
{ name: 'Profundo — analiza todos los archivos', value: 'deep' },
|
|
105
|
+
],
|
|
106
|
+
default: 'fast',
|
|
107
|
+
});
|
|
108
|
+
isDeep = options.deep || analysisMode === 'deep';
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
if (isExitPromptError(err)) {
|
|
112
|
+
console.log('\n ' + c.amber('→') + ' ' + c.dim('Usando configuración por defecto.'));
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
throw err;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Non-interactive mode: use defaults
|
|
121
|
+
console.log(' ' + c.dim('Modo no-interactivo: usando configuración por defecto.'));
|
|
122
|
+
}
|
|
123
|
+
if (connectDashboard) {
|
|
124
|
+
console.log('\n ' + c.amber('→') + ' ' + c.dim('Abre https://repomap.app para autenticarte, luego ejecuta:') +
|
|
125
|
+
' ' + c.cyan('repomap login'));
|
|
126
|
+
}
|
|
127
|
+
console.log('');
|
|
128
|
+
// ── Phased progress ──────────────────────────────────────────────────────────
|
|
129
|
+
const spinner = ora({ color: 'green' });
|
|
130
|
+
// Phase 1: Initialize analyzers
|
|
131
|
+
spinner.start(c.dim('Inicializando analizadores...'));
|
|
132
|
+
await initAnalyzer();
|
|
133
|
+
const wasmMode = isWasmAvailable();
|
|
134
|
+
const analyzerLabel = wasmMode ? 'tree-sitter (WASM)' : 'enhanced-regex';
|
|
135
|
+
spinner.succeed(c.emerald('✓') + ' Analizadores listos ' + c.dim(`[${analyzerLabel}]`));
|
|
136
|
+
// Phase 2: Scan files
|
|
137
|
+
spinner.start(c.dim(`Escaneando archivos${isDeep ? ' (modo profundo)' : ' (top 500)'}...`));
|
|
138
|
+
const scannedFiles = scanFiles(rootDir, isDeep);
|
|
139
|
+
spinner.succeed(c.emerald('✓') + ' ' + c.white('Archivos escaneados') +
|
|
140
|
+
c.dim(' ' + scannedFiles.length + ' archivos'));
|
|
141
|
+
// Phase 3: Detect stack
|
|
142
|
+
spinner.start(c.dim('Detectando stack...'));
|
|
143
|
+
const stack = detectStack(rootDir, scannedFiles);
|
|
144
|
+
const stackStr = [...stack.frameworks, ...stack.languages].slice(0, 4).join(', ') || 'desconocido';
|
|
145
|
+
spinner.succeed(c.emerald('✓') + ' ' + c.white('Stack detectado') +
|
|
146
|
+
c.dim(' ' + stackStr));
|
|
147
|
+
// Phase 4: Analyze dependencies
|
|
148
|
+
spinner.start(c.dim('Analizando dependencias...'));
|
|
149
|
+
const analyzedFiles = analyzeFiles(scannedFiles);
|
|
150
|
+
const importsCount = analyzedFiles.reduce((sum, f) => sum + (f.imports?.length ?? 0), 0);
|
|
151
|
+
spinner.succeed(c.emerald('✓') + ' ' + c.white('Dependencias mapeadas') +
|
|
152
|
+
c.dim(' ' + importsCount + ' imports'));
|
|
153
|
+
// Phase 5: Generate CLAUDE.md
|
|
154
|
+
spinner.start(c.dim('Generando CLAUDE.md...'));
|
|
155
|
+
const modules = detectModules(analyzedFiles, stack);
|
|
156
|
+
const healthScore = calculateHealthScore(analyzedFiles, scannedFiles.length, modules);
|
|
157
|
+
const resolvedName = stack.projectName ?? projectName;
|
|
158
|
+
const claudeMdContent = generateClaudeMd({
|
|
159
|
+
rootDir,
|
|
160
|
+
projectName: resolvedName,
|
|
161
|
+
stack,
|
|
162
|
+
files: analyzedFiles,
|
|
163
|
+
healthScore,
|
|
164
|
+
});
|
|
165
|
+
writeClaudeMd(rootDir, claudeMdContent);
|
|
166
|
+
const lineCount = claudeMdContent.main.split('\n').length;
|
|
167
|
+
spinner.succeed(c.emerald('✓') + ' ' + c.white('CLAUDE.md generado') +
|
|
168
|
+
c.dim(' ' + lineCount + ' líneas'));
|
|
169
|
+
// Phase 6: Calculate health score & write map
|
|
170
|
+
spinner.start(c.dim('Calculando health score...'));
|
|
171
|
+
const repoMap = generateMapJson(analyzedFiles, stack, healthScore, wasmMode ? 'tree-sitter' : 'enhanced-regex');
|
|
172
|
+
writeMapJson(rootDir, repoMap);
|
|
173
|
+
const bar = healthBar(healthScore);
|
|
174
|
+
spinner.succeed(c.emerald('✓') + ' ' + c.white('Health score') +
|
|
175
|
+
c.dim(' ' + healthScore + '/100 ') + bar);
|
|
176
|
+
// ── Summary box ──────────────────────────────────────────────────────────────
|
|
177
|
+
const summaryLines = [
|
|
178
|
+
' ' + c.emerald('✓') + ' ' + c.bold(c.white('RepoMap inicializado')),
|
|
179
|
+
'',
|
|
180
|
+
' ' + c.dim('Proyecto: ') + c.white(resolvedName),
|
|
181
|
+
' ' + c.dim('Archivos: ') + c.white(analyzedFiles.length + ' analizados'),
|
|
182
|
+
' ' + c.dim('Stack: ') + c.white(stackStr),
|
|
183
|
+
' ' + c.dim('Health: ') + c.white(healthScore + '/100 ') + bar,
|
|
184
|
+
'',
|
|
185
|
+
' ' + c.dim('Archivos creados:'),
|
|
186
|
+
' ' + c.emerald('•') + ' ' + c.white('CLAUDE.md'),
|
|
187
|
+
' ' + c.emerald('•') + ' ' + c.white('.repomap/map.json'),
|
|
188
|
+
' ' + c.emerald('•') + ' ' + c.white('.repomap/docs/architecture.md'),
|
|
189
|
+
' ' + c.emerald('•') + ' ' + c.white('.repomap/docs/conventions.md'),
|
|
190
|
+
' ' + c.emerald('•') + ' ' + c.white('.repomap/docs/api-reference.md'),
|
|
191
|
+
' ' + c.emerald('•') + ' ' + c.white('.repomap/docs/components.md'),
|
|
192
|
+
'',
|
|
193
|
+
' ' + c.dim('Siguiente paso:'),
|
|
194
|
+
' ' + c.cyan('repomap watch') + c.dim(' ← mantén tu mapa actualizado'),
|
|
195
|
+
' ' + c.cyan('repomap login') + c.dim(' ← conecta con el dashboard'),
|
|
196
|
+
];
|
|
197
|
+
console.log('\n' + summaryBox(summaryLines.join('\n')) + '\n');
|
|
198
|
+
// Maybe show Conductor cross-sell tip (only once, only for Pro non-Stack)
|
|
199
|
+
const appUrl = process.env.REPOMAP_APP_URL ?? 'https://repomap.app';
|
|
200
|
+
await maybeShowConductorTip(appUrl);
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
declare function refreshAccessToken(refreshToken: string): Promise<{
|
|
2
|
+
access_token: string;
|
|
3
|
+
refresh_token: string;
|
|
4
|
+
expires_at?: number;
|
|
5
|
+
} | null>;
|
|
6
|
+
export { refreshAccessToken };
|
|
7
|
+
export declare function runLogin(): Promise<void>;
|
|
8
|
+
export declare function runLogout(): void;
|
|
9
|
+
//# sourceMappingURL=login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAyBA,iBAAe,kBAAkB,CAC/B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAkBtF;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAuF9C;AAED,wBAAgB,SAAS,IAAI,IAAI,CAKhC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
import { saveCredentials, clearCredentials } from '../utils/credentials.js';
|
|
3
|
+
import { c } from '../utils/ui.js';
|
|
4
|
+
const API_BASE = 'https://repomap.app/api';
|
|
5
|
+
function openBrowser(url) {
|
|
6
|
+
const cmd = process.platform === 'darwin' ? 'open' : 'xdg-open';
|
|
7
|
+
exec(`${cmd} "${url}"`);
|
|
8
|
+
}
|
|
9
|
+
async function refreshAccessToken(refreshToken) {
|
|
10
|
+
try {
|
|
11
|
+
const res = await fetch(`${API_BASE}/auth/device/refresh`, {
|
|
12
|
+
method: 'POST',
|
|
13
|
+
headers: { 'Content-Type': 'application/json' },
|
|
14
|
+
body: JSON.stringify({ refresh_token: refreshToken }),
|
|
15
|
+
signal: AbortSignal.timeout(10000),
|
|
16
|
+
});
|
|
17
|
+
if (!res.ok)
|
|
18
|
+
return null;
|
|
19
|
+
const data = (await res.json());
|
|
20
|
+
return data;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export { refreshAccessToken };
|
|
27
|
+
export async function runLogin() {
|
|
28
|
+
console.log('');
|
|
29
|
+
console.log(' ' + c.bold(c.white('RepoMap Login')));
|
|
30
|
+
console.log('');
|
|
31
|
+
// 1. Create device code via API
|
|
32
|
+
let deviceCode;
|
|
33
|
+
try {
|
|
34
|
+
const res = await fetch(`${API_BASE}/auth/device/create`, {
|
|
35
|
+
method: 'POST',
|
|
36
|
+
headers: { 'Content-Type': 'application/json' },
|
|
37
|
+
signal: AbortSignal.timeout(10000),
|
|
38
|
+
});
|
|
39
|
+
if (!res.ok)
|
|
40
|
+
throw new Error(`Server error: ${res.status}`);
|
|
41
|
+
const data = (await res.json());
|
|
42
|
+
if (!data.code)
|
|
43
|
+
throw new Error('No code returned');
|
|
44
|
+
deviceCode = data.code;
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
console.error(' ' + c.red('✗') + ' No se pudo conectar con el servidor.' +
|
|
48
|
+
(err instanceof Error ? ' ' + c.dim(err.message) : ''));
|
|
49
|
+
console.log('');
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
// 2. Show code and open browser
|
|
53
|
+
const authUrl = `https://repomap.app/auth/device?code=${deviceCode}`;
|
|
54
|
+
console.log(' ' + c.emerald('✓') + ' Abre este link en tu navegador:');
|
|
55
|
+
console.log(' ' + c.cyan(authUrl));
|
|
56
|
+
console.log('');
|
|
57
|
+
console.log(' Tu código: ' + c.bold(c.white(deviceCode)));
|
|
58
|
+
console.log('');
|
|
59
|
+
console.log(' ' + c.dim('Esperando autenticación...'));
|
|
60
|
+
console.log('');
|
|
61
|
+
openBrowser(authUrl);
|
|
62
|
+
// 3. Poll every 2s (max 5 minutes = 150 attempts)
|
|
63
|
+
const maxAttempts = 150;
|
|
64
|
+
for (let i = 0; i < maxAttempts; i++) {
|
|
65
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
66
|
+
let pollData;
|
|
67
|
+
try {
|
|
68
|
+
const res = await fetch(`${API_BASE}/auth/device/poll?code=${encodeURIComponent(deviceCode)}`, { signal: AbortSignal.timeout(8000) });
|
|
69
|
+
if (!res.ok)
|
|
70
|
+
continue;
|
|
71
|
+
pollData = (await res.json());
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (pollData.status === 'confirmed') {
|
|
77
|
+
saveCredentials({
|
|
78
|
+
access_token: pollData.access_token,
|
|
79
|
+
refresh_token: pollData.refresh_token,
|
|
80
|
+
email: pollData.email,
|
|
81
|
+
expires_at: pollData.token_expires_at,
|
|
82
|
+
});
|
|
83
|
+
console.log(' ' + c.emerald('✓') + ' Autenticado como ' + c.white(pollData.email));
|
|
84
|
+
console.log(' Plan: ' + c.white(pollData.plan ?? 'free') + ' ' + c.emerald('✓'));
|
|
85
|
+
console.log('');
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (pollData.status === 'expired') {
|
|
89
|
+
console.error(' ' + c.red('✗') + ' Código expirado. Ejecuta ' +
|
|
90
|
+
c.cyan('repomap login') +
|
|
91
|
+
' de nuevo.');
|
|
92
|
+
console.log('');
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
console.error(' ' + c.red('✗') + ' Timeout esperando autenticación.');
|
|
97
|
+
console.log('');
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
export function runLogout() {
|
|
101
|
+
clearCredentials();
|
|
102
|
+
console.log('');
|
|
103
|
+
console.log(' ' + c.emerald('✓') + ' Sesión cerrada. Credenciales eliminadas.');
|
|
104
|
+
console.log('');
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,CAAC,EAAE,MAAM,gBAAgB,CAAC;AAEnC,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAE3C,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;IAChE,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;AAC1B,CAAC;AAgBD,KAAK,UAAU,kBAAkB,CAC/B,YAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,sBAAsB,EAAE;YACzD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;YACrD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAM,CAAC;SACpC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAI7B,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,gCAAgC;IAChC,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,qBAAqB,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAM,CAAC;SACpC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA6B,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACpD,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,uCAAuC;YACzD,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CACzD,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gCAAgC;IAChC,MAAM,OAAO,GAAG,wCAAwC,UAAU,EAAE,CAAC;IAErE,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,kCAAkC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,WAAW,CAAC,OAAO,CAAC,CAAC;IAErB,kDAAkD;IAClD,MAAM,WAAW,GAAG,GAAG,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAEhE,IAAI,QAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,GAAG,QAAQ,0BAA0B,kBAAkB,CAAC,UAAU,CAAC,EAAE,EACrE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CACtC,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,SAAS;YACtB,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAiB,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACpC,eAAe,CAAC;gBACd,YAAY,EAAE,QAAQ,CAAC,YAAa;gBACpC,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,KAAK,EAAE,QAAQ,CAAC,KAAM;gBACtB,UAAU,EAAE,QAAQ,CAAC,gBAAgB;aACtC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CACT,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAM,CAAC,CACxE,CAAC;YACF,OAAO,CAAC,GAAG,CACT,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CACvE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CACX,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,4BAA4B;gBAC9C,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;gBACvB,YAAY,CACf,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,mCAAmC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,gBAAgB,EAAE,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,2CAA2C,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAgWA,wBAAsB,MAAM,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0OtE"}
|