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.
Files changed (65) hide show
  1. package/dist/analyzer/imports-analyzer.d.ts +27 -0
  2. package/dist/analyzer/imports-analyzer.d.ts.map +1 -0
  3. package/dist/analyzer/imports-analyzer.js +74 -0
  4. package/dist/analyzer/imports-analyzer.js.map +1 -0
  5. package/dist/analyzer/tree-sitter-analyzer.d.ts +37 -0
  6. package/dist/analyzer/tree-sitter-analyzer.d.ts.map +1 -0
  7. package/dist/analyzer/tree-sitter-analyzer.js +531 -0
  8. package/dist/analyzer/tree-sitter-analyzer.js.map +1 -0
  9. package/dist/commands/init.d.ts +6 -0
  10. package/dist/commands/init.d.ts.map +1 -0
  11. package/dist/commands/init.js +202 -0
  12. package/dist/commands/init.js.map +1 -0
  13. package/dist/commands/login.d.ts +9 -0
  14. package/dist/commands/login.d.ts.map +1 -0
  15. package/dist/commands/login.js +106 -0
  16. package/dist/commands/login.js.map +1 -0
  17. package/dist/commands/mcp.d.ts +4 -0
  18. package/dist/commands/mcp.d.ts.map +1 -0
  19. package/dist/commands/mcp.js +511 -0
  20. package/dist/commands/mcp.js.map +1 -0
  21. package/dist/commands/snapshot.d.ts +8 -0
  22. package/dist/commands/snapshot.d.ts.map +1 -0
  23. package/dist/commands/snapshot.js +314 -0
  24. package/dist/commands/snapshot.js.map +1 -0
  25. package/dist/commands/status.d.ts +5 -0
  26. package/dist/commands/status.d.ts.map +1 -0
  27. package/dist/commands/status.js +108 -0
  28. package/dist/commands/status.js.map +1 -0
  29. package/dist/commands/watch.d.ts +5 -0
  30. package/dist/commands/watch.d.ts.map +1 -0
  31. package/dist/commands/watch.js +367 -0
  32. package/dist/commands/watch.js.map +1 -0
  33. package/dist/generator/claude-md.d.ts +19 -0
  34. package/dist/generator/claude-md.d.ts.map +1 -0
  35. package/dist/generator/claude-md.js +656 -0
  36. package/dist/generator/claude-md.js.map +1 -0
  37. package/dist/generator/map-json.d.ts +35 -0
  38. package/dist/generator/map-json.d.ts.map +1 -0
  39. package/dist/generator/map-json.js +130 -0
  40. package/dist/generator/map-json.js.map +1 -0
  41. package/dist/index.d.ts +3 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +91 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/scanner/file-scanner.d.ts +9 -0
  46. package/dist/scanner/file-scanner.d.ts.map +1 -0
  47. package/dist/scanner/file-scanner.js +76 -0
  48. package/dist/scanner/file-scanner.js.map +1 -0
  49. package/dist/scanner/stack-detector.d.ts +10 -0
  50. package/dist/scanner/stack-detector.d.ts.map +1 -0
  51. package/dist/scanner/stack-detector.js +153 -0
  52. package/dist/scanner/stack-detector.js.map +1 -0
  53. package/dist/utils/credentials.d.ts +11 -0
  54. package/dist/utils/credentials.d.ts.map +1 -0
  55. package/dist/utils/credentials.js +34 -0
  56. package/dist/utils/credentials.js.map +1 -0
  57. package/dist/utils/health-score.d.ts +10 -0
  58. package/dist/utils/health-score.d.ts.map +1 -0
  59. package/dist/utils/health-score.js +44 -0
  60. package/dist/utils/health-score.js.map +1 -0
  61. package/dist/utils/ui.d.ts +14 -0
  62. package/dist/utils/ui.d.ts.map +1 -0
  63. package/dist/utils/ui.js +45 -0
  64. package/dist/utils/ui.js.map +1 -0
  65. 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":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function runMcp(options: {
2
+ path?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=mcp.d.ts.map
@@ -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"}