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,367 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { loadCredentials } from '../utils/credentials.js';
|
|
4
|
+
import { c } from '../utils/ui.js';
|
|
5
|
+
import { scanFiles } from '../scanner/file-scanner.js';
|
|
6
|
+
import { detectStack } from '../scanner/stack-detector.js';
|
|
7
|
+
import { initAnalyzer, analyzeFiles } from '../analyzer/imports-analyzer.js';
|
|
8
|
+
import { generateMapJson, writeMapJson, detectModules } from '../generator/map-json.js';
|
|
9
|
+
import { generateClaudeMd, writeClaudeMd } from '../generator/claude-md.js';
|
|
10
|
+
import { calculateHealthScore } from '../utils/health-score.js';
|
|
11
|
+
const API_BASE = 'https://repomap.app/api/v1';
|
|
12
|
+
// Heat decay factor: every hour, heat is multiplied by this value
|
|
13
|
+
const HEAT_DECAY_FACTOR = 0.95;
|
|
14
|
+
const HEAT_DECAY_INTERVAL_MS = 60 * 60 * 1000; // 1 hour
|
|
15
|
+
// ─── Terminal output helpers ──────────────────────────────────────────────────
|
|
16
|
+
function logChange(type, filePath, extra) {
|
|
17
|
+
const ts = new Date().toLocaleTimeString('en-US', { hour12: false });
|
|
18
|
+
const iconMap = {
|
|
19
|
+
add: c.emerald('+'),
|
|
20
|
+
change: c.cyan('~'),
|
|
21
|
+
unlink: c.red('-'),
|
|
22
|
+
info: c.dim('i'),
|
|
23
|
+
warn: c.amber('!'),
|
|
24
|
+
regen: c.emerald('*'),
|
|
25
|
+
};
|
|
26
|
+
const icon = iconMap[type] ?? c.dim('?');
|
|
27
|
+
const label = extra ? ' ' + c.dim(extra) : '';
|
|
28
|
+
const fileStr = type === 'warn' ? c.amber(filePath) : type === 'unlink' ? c.dim(filePath) : filePath;
|
|
29
|
+
console.log(` ${c.dim('[' + ts + ']')} ${icon} ${fileStr}${label}`);
|
|
30
|
+
}
|
|
31
|
+
async function checkProPlan(accessToken) {
|
|
32
|
+
try {
|
|
33
|
+
const res = await fetch(`${API_BASE}/user/plan`, {
|
|
34
|
+
headers: {
|
|
35
|
+
Authorization: `Bearer ${accessToken}`,
|
|
36
|
+
'Content-Type': 'application/json',
|
|
37
|
+
},
|
|
38
|
+
signal: AbortSignal.timeout(8000),
|
|
39
|
+
});
|
|
40
|
+
if (!res.ok)
|
|
41
|
+
return false;
|
|
42
|
+
const data = (await res.json());
|
|
43
|
+
return data.plan === 'pro' || data.plan === 'team';
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// If the API is unreachable, allow the command to proceed (offline mode).
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// ─── Task 2: Heat tracking & decay ───────────────────────────────────────────
|
|
51
|
+
function loadMapJson(rootDir) {
|
|
52
|
+
const mapPath = path.join(rootDir, '.repomap', 'map.json');
|
|
53
|
+
try {
|
|
54
|
+
const raw = fs.readFileSync(mapPath, 'utf-8');
|
|
55
|
+
return JSON.parse(raw);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Increment heat for a file in map.json (capped at 100).
|
|
63
|
+
* Also stores a `heat_updated_at` ISO timestamp per file.
|
|
64
|
+
*/
|
|
65
|
+
function incrementHeat(map, filePath, rootDir) {
|
|
66
|
+
const rel = path.relative(rootDir, filePath).replace(/\\/g, '/');
|
|
67
|
+
const entry = map.files.find((f) => f.path === rel);
|
|
68
|
+
if (entry) {
|
|
69
|
+
entry.heat = Math.min(100, (entry.heat ?? 0) + 5);
|
|
70
|
+
entry.heat_updated_at = new Date().toISOString();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Apply time-based decay to all file heat values.
|
|
75
|
+
* Files that haven't been touched recently lose heat gradually.
|
|
76
|
+
*/
|
|
77
|
+
function applyHeatDecay(map) {
|
|
78
|
+
const now = Date.now();
|
|
79
|
+
for (const entry of map.files) {
|
|
80
|
+
const meta = entry;
|
|
81
|
+
if (!meta.heat_updated_at)
|
|
82
|
+
continue;
|
|
83
|
+
const lastUpdate = new Date(meta.heat_updated_at).getTime();
|
|
84
|
+
const hoursPassed = (now - lastUpdate) / HEAT_DECAY_INTERVAL_MS;
|
|
85
|
+
if (hoursPassed >= 1) {
|
|
86
|
+
entry.heat = Math.max(0, Math.round(entry.heat * Math.pow(HEAT_DECAY_FACTOR, hoursPassed)));
|
|
87
|
+
meta.heat_updated_at = new Date().toISOString();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function readClaudeMdTrackedFiles(rootDir) {
|
|
92
|
+
const claudeMdPath = path.join(rootDir, 'CLAUDE.md');
|
|
93
|
+
try {
|
|
94
|
+
const content = fs.readFileSync(claudeMdPath, 'utf-8');
|
|
95
|
+
const tracked = new Set();
|
|
96
|
+
// Extract backtick-quoted paths that look like file paths
|
|
97
|
+
const matches = content.match(/`([^`]+\.[a-zA-Z0-9]+)`/g) ?? [];
|
|
98
|
+
for (const m of matches) {
|
|
99
|
+
tracked.add(m.replace(/`/g, ''));
|
|
100
|
+
}
|
|
101
|
+
return tracked;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return new Set();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function hashPackageJson(rootDir) {
|
|
108
|
+
const pkgPath = path.join(rootDir, 'package.json');
|
|
109
|
+
try {
|
|
110
|
+
const raw = fs.readFileSync(pkgPath, 'utf-8');
|
|
111
|
+
// Simple hash: stringify of dependencies keys sorted
|
|
112
|
+
const pkg = JSON.parse(raw);
|
|
113
|
+
const deps = Object.keys({ ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) }).sort().join(',');
|
|
114
|
+
return deps;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async function regenerateClaudeMdAndMap(rootDir) {
|
|
121
|
+
const scannedFiles = scanFiles(rootDir, false);
|
|
122
|
+
const analyzedFiles = analyzeFiles(scannedFiles);
|
|
123
|
+
const stack = detectStack(rootDir, scannedFiles);
|
|
124
|
+
const modules = detectModules(analyzedFiles, stack);
|
|
125
|
+
const healthScore = calculateHealthScore(analyzedFiles, scannedFiles.length, modules);
|
|
126
|
+
const projectName = stack.projectName ?? path.basename(rootDir);
|
|
127
|
+
const claudeMdContent = generateClaudeMd({ rootDir, projectName, stack, files: analyzedFiles, healthScore });
|
|
128
|
+
writeClaudeMd(rootDir, claudeMdContent);
|
|
129
|
+
const repoMap = generateMapJson(analyzedFiles, stack, healthScore);
|
|
130
|
+
writeMapJson(rootDir, repoMap);
|
|
131
|
+
return healthScore;
|
|
132
|
+
}
|
|
133
|
+
function shouldRegenerateClaudeMd(session, event, filePath, rootDir) {
|
|
134
|
+
const rel = path.relative(rootDir, filePath).replace(/\\/g, '/');
|
|
135
|
+
// 1. Too many new files
|
|
136
|
+
if (session.newFilesCount >= 10) {
|
|
137
|
+
return { should: true, reason: `${session.newFilesCount} new files added` };
|
|
138
|
+
}
|
|
139
|
+
// 2. Deleted a file tracked in CLAUDE.md
|
|
140
|
+
if (event === 'unlink' && session.claudeMdTrackedFiles.has(rel)) {
|
|
141
|
+
return { should: true, reason: `tracked file deleted: ${rel}` };
|
|
142
|
+
}
|
|
143
|
+
// 3. package.json changed → possible new framework
|
|
144
|
+
if (event === 'change' && (rel === 'package.json' || rel.endsWith('/package.json'))) {
|
|
145
|
+
const newHash = hashPackageJson(rootDir);
|
|
146
|
+
if (newHash !== session.initialPackageJsonHash) {
|
|
147
|
+
return { should: true, reason: 'new dependency detected in package.json' };
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return { should: false, reason: '' };
|
|
151
|
+
}
|
|
152
|
+
// ─── Task 4: Dashboard sync & usage events ───────────────────────────────────
|
|
153
|
+
async function syncWithDashboard(accessToken, map, rootDir) {
|
|
154
|
+
try {
|
|
155
|
+
await fetch(`${API_BASE}/repos/sync`, {
|
|
156
|
+
method: 'POST',
|
|
157
|
+
headers: {
|
|
158
|
+
Authorization: `Bearer ${accessToken}`,
|
|
159
|
+
'Content-Type': 'application/json',
|
|
160
|
+
},
|
|
161
|
+
body: JSON.stringify({ root_dir: path.basename(rootDir), map }),
|
|
162
|
+
signal: AbortSignal.timeout(10000),
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
// Silently ignore sync errors — offline is fine
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
async function logUsageEvent(accessToken, eventType, rootDir, meta) {
|
|
170
|
+
try {
|
|
171
|
+
await fetch(`${API_BASE}/usage-events`, {
|
|
172
|
+
method: 'POST',
|
|
173
|
+
headers: {
|
|
174
|
+
Authorization: `Bearer ${accessToken}`,
|
|
175
|
+
'Content-Type': 'application/json',
|
|
176
|
+
},
|
|
177
|
+
body: JSON.stringify({ event_type: eventType, project: path.basename(rootDir), ...meta }),
|
|
178
|
+
signal: AbortSignal.timeout(8000),
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// Silently ignore
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// ─── Main watch command ───────────────────────────────────────────────────────
|
|
186
|
+
export async function runWatch(options) {
|
|
187
|
+
const rootDir = path.resolve(options.path);
|
|
188
|
+
// Load credentials
|
|
189
|
+
const creds = loadCredentials();
|
|
190
|
+
// If not authenticated, show login message and exit
|
|
191
|
+
if (!creds) {
|
|
192
|
+
console.error('\n ' + c.red('✗') + ' repomap watch requiere el plan Pro.');
|
|
193
|
+
console.error(' ' + c.dim(' Inicia sesión primero: ') + c.cyan('repomap login'));
|
|
194
|
+
console.error(' ' + c.dim(' Activa Pro en https://repomap.app/pricing → desde $19/mes.\n'));
|
|
195
|
+
process.exit(1);
|
|
196
|
+
}
|
|
197
|
+
// Verify Pro plan
|
|
198
|
+
console.log('\n ' + c.dim('Verificando plan...'));
|
|
199
|
+
const accessToken = creds.access_token;
|
|
200
|
+
const isPro = await checkProPlan(accessToken);
|
|
201
|
+
if (!isPro) {
|
|
202
|
+
console.error('\n ' + c.red('✗') + ' repomap watch requiere el plan Pro.');
|
|
203
|
+
console.error(' ' + c.dim(' Activa Pro en https://repomap.app/pricing → desde $19/mes.\n'));
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
// Ensure .repomap/map.json exists (generate if missing)
|
|
207
|
+
let map = loadMapJson(rootDir);
|
|
208
|
+
if (!map) {
|
|
209
|
+
console.log(' ' + c.dim('Generando mapa inicial...'));
|
|
210
|
+
await initAnalyzer();
|
|
211
|
+
const healthScore = await regenerateClaudeMdAndMap(rootDir);
|
|
212
|
+
map = loadMapJson(rootDir);
|
|
213
|
+
logChange('regen', 'CLAUDE.md', `(health: ${healthScore}/100)`);
|
|
214
|
+
}
|
|
215
|
+
// Session state
|
|
216
|
+
const session = {
|
|
217
|
+
newFilesCount: 0,
|
|
218
|
+
claudeMdTrackedFiles: readClaudeMdTrackedFiles(rootDir),
|
|
219
|
+
initialHealthScore: map.health_score,
|
|
220
|
+
initialPackageJsonHash: hashPackageJson(rootDir),
|
|
221
|
+
};
|
|
222
|
+
// Task 9: Log usage_event watch_session_start
|
|
223
|
+
void logUsageEvent(accessToken, 'watch_session_start', rootDir, {
|
|
224
|
+
health_score: map.health_score,
|
|
225
|
+
file_count: map.files.length,
|
|
226
|
+
});
|
|
227
|
+
console.log('\n ' + c.emerald('●') + ' ' + c.white('Watching') + ' ' + c.dim(rootDir));
|
|
228
|
+
console.log(' ' + c.dim('Press Ctrl+C to stop.\n'));
|
|
229
|
+
// Debounce map writes to avoid hammering disk
|
|
230
|
+
let writeTimer = null;
|
|
231
|
+
let pendingSync = false;
|
|
232
|
+
function scheduleMapWrite() {
|
|
233
|
+
if (writeTimer)
|
|
234
|
+
clearTimeout(writeTimer);
|
|
235
|
+
writeTimer = setTimeout(() => {
|
|
236
|
+
if (!map)
|
|
237
|
+
return;
|
|
238
|
+
applyHeatDecay(map);
|
|
239
|
+
map.analyzed_at = new Date().toISOString();
|
|
240
|
+
writeMapJson(rootDir, map);
|
|
241
|
+
pendingSync = true;
|
|
242
|
+
}, 500);
|
|
243
|
+
}
|
|
244
|
+
// Debounced dashboard sync (every 30s max)
|
|
245
|
+
let lastSync = 0;
|
|
246
|
+
function maybeSyncDashboard() {
|
|
247
|
+
if (!pendingSync)
|
|
248
|
+
return;
|
|
249
|
+
const now = Date.now();
|
|
250
|
+
if (now - lastSync < 30000)
|
|
251
|
+
return;
|
|
252
|
+
lastSync = now;
|
|
253
|
+
pendingSync = false;
|
|
254
|
+
if (!map)
|
|
255
|
+
return;
|
|
256
|
+
void syncWithDashboard(accessToken, map, rootDir);
|
|
257
|
+
}
|
|
258
|
+
const syncInterval = setInterval(maybeSyncDashboard, 30000);
|
|
259
|
+
// Heat decay interval (every hour)
|
|
260
|
+
const decayInterval = setInterval(() => {
|
|
261
|
+
if (!map)
|
|
262
|
+
return;
|
|
263
|
+
applyHeatDecay(map);
|
|
264
|
+
scheduleMapWrite();
|
|
265
|
+
}, HEAT_DECAY_INTERVAL_MS);
|
|
266
|
+
// ── File watcher (Node.js built-in, recursive) ──
|
|
267
|
+
const watcher = fs.watch(rootDir, { recursive: true }, (eventType, filename) => {
|
|
268
|
+
if (!filename)
|
|
269
|
+
return;
|
|
270
|
+
// Ignore .repomap/ internals, node_modules, .git
|
|
271
|
+
if (filename.startsWith('.repomap') ||
|
|
272
|
+
filename.startsWith('node_modules') ||
|
|
273
|
+
filename.startsWith('.git')) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
const absPath = path.join(rootDir, filename);
|
|
277
|
+
const rel = filename.replace(/\\/g, '/');
|
|
278
|
+
let changeType;
|
|
279
|
+
if (eventType === 'rename') {
|
|
280
|
+
changeType = fs.existsSync(absPath) ? 'add' : 'unlink';
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
changeType = 'change';
|
|
284
|
+
}
|
|
285
|
+
// Task 7: Terminal log
|
|
286
|
+
logChange(changeType, rel);
|
|
287
|
+
// Update map in memory
|
|
288
|
+
if (!map)
|
|
289
|
+
return;
|
|
290
|
+
if (changeType === 'add') {
|
|
291
|
+
session.newFilesCount++;
|
|
292
|
+
// Add file to map if not present with heat=1
|
|
293
|
+
const existingEntry = map.files.find((f) => f.path === rel);
|
|
294
|
+
if (!existingEntry) {
|
|
295
|
+
const ext = path.extname(filename).slice(1) || 'unknown';
|
|
296
|
+
map.files.push({
|
|
297
|
+
path: rel,
|
|
298
|
+
type: ext,
|
|
299
|
+
language: 'unknown',
|
|
300
|
+
imports: [],
|
|
301
|
+
exports: [],
|
|
302
|
+
complexity: 1,
|
|
303
|
+
lines: 0,
|
|
304
|
+
heat: 1,
|
|
305
|
+
...({ heat_updated_at: new Date().toISOString() }),
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
else if (changeType === 'change') {
|
|
310
|
+
// Task 2: Increment heat
|
|
311
|
+
incrementHeat(map, absPath, rootDir);
|
|
312
|
+
}
|
|
313
|
+
else if (changeType === 'unlink') {
|
|
314
|
+
map.files = map.files.filter((f) => f.path !== rel);
|
|
315
|
+
}
|
|
316
|
+
scheduleMapWrite();
|
|
317
|
+
// Task 3: Check if structural regeneration is needed
|
|
318
|
+
const { should, reason } = shouldRegenerateClaudeMd(session, changeType, absPath, rootDir);
|
|
319
|
+
if (should) {
|
|
320
|
+
logChange('regen', 'CLAUDE.md', `(reason: ${reason})`);
|
|
321
|
+
initAnalyzer()
|
|
322
|
+
.then(() => regenerateClaudeMdAndMap(rootDir))
|
|
323
|
+
.then((newHealthScore) => {
|
|
324
|
+
if (!map)
|
|
325
|
+
return;
|
|
326
|
+
const drop = session.initialHealthScore - newHealthScore;
|
|
327
|
+
if (drop > 20) {
|
|
328
|
+
logChange('warn', `Health score dropped ${drop} pts → ${newHealthScore}/100`);
|
|
329
|
+
}
|
|
330
|
+
// Refresh map after regen
|
|
331
|
+
map = loadMapJson(rootDir) ?? map;
|
|
332
|
+
session.newFilesCount = 0;
|
|
333
|
+
session.claudeMdTrackedFiles = readClaudeMdTrackedFiles(rootDir);
|
|
334
|
+
session.initialHealthScore = newHealthScore;
|
|
335
|
+
})
|
|
336
|
+
.catch(() => {
|
|
337
|
+
// Ignore regen errors silently
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
// ── Graceful shutdown ──
|
|
342
|
+
const shutdown = () => {
|
|
343
|
+
console.log('\n\n ' + c.dim('Stopping watcher...'));
|
|
344
|
+
watcher.close();
|
|
345
|
+
clearInterval(syncInterval);
|
|
346
|
+
clearInterval(decayInterval);
|
|
347
|
+
if (writeTimer)
|
|
348
|
+
clearTimeout(writeTimer);
|
|
349
|
+
// Final map write
|
|
350
|
+
if (map) {
|
|
351
|
+
applyHeatDecay(map);
|
|
352
|
+
map.analyzed_at = new Date().toISOString();
|
|
353
|
+
writeMapJson(rootDir, map);
|
|
354
|
+
void syncWithDashboard(accessToken, map, rootDir);
|
|
355
|
+
}
|
|
356
|
+
// Task 9: Log usage_event watch_session_end
|
|
357
|
+
void logUsageEvent(accessToken, 'watch_session_end', rootDir, {
|
|
358
|
+
health_score: map?.health_score ?? 0,
|
|
359
|
+
files_changed: session.newFilesCount,
|
|
360
|
+
});
|
|
361
|
+
console.log(' ' + c.emerald('✓') + ' Done.\n');
|
|
362
|
+
process.exit(0);
|
|
363
|
+
};
|
|
364
|
+
process.on('SIGINT', shutdown);
|
|
365
|
+
process.on('SIGTERM', shutdown);
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAgB,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,QAAQ,GAAG,4BAA4B,CAAC;AAC9C,kEAAkE;AAClE,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAMxD,iFAAiF;AAEjF,SAAS,SAAS,CAAC,IAA6D,EAAE,QAAgB,EAAE,KAAc;IAChH,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,MAAM,OAAO,GAA2B;QACtC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QACnB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACnB,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QAClB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QAChB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAClB,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;KACtB,CAAC;IACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC;AACvE,CAAC;AAQD,KAAK,UAAU,YAAY,CAAC,WAAmB;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,YAAY,EAAE;YAC/C,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,cAAc,EAAE,kBAAkB;aACnC;YACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QAC1B,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqB,CAAC;QACpD,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF,SAAS,WAAW,CAAC,OAAe;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,GAAY,EAAE,QAAgB,EAAE,OAAe;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;IACpD,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,KAAyB,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,GAAY;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,KAAwB,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,SAAS;QACpC,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5D,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,sBAAsB,CAAC;QAChE,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;YAC5F,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;AACH,CAAC;AAmBD,SAAS,wBAAwB,CAAC,OAAe;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,0DAA0D;QAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,IAAI,EAAE,CAAC;QAChE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,qDAAqD;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwF,CAAC;QACnH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3G,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,OAAe;IACrD,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,oBAAoB,CAAC,aAAa,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtF,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEhE,MAAM,eAAe,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;IAC7G,aAAa,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAExC,MAAM,OAAO,GAAG,eAAe,CAAC,aAAa,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACnE,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE/B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAqB,EACrB,KAAkC,EAClC,QAAgB,EAChB,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEjE,wBAAwB;IACxB,IAAI,OAAO,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;QAChC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,kBAAkB,EAAE,CAAC;IAC9E,CAAC;IAED,yCAAyC;IACzC,IAAI,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,yBAAyB,GAAG,EAAE,EAAE,CAAC;IAClE,CAAC;IAED,mDAAmD;IACnD,IAAI,KAAK,KAAK,QAAQ,IAAI,CAAC,GAAG,KAAK,cAAc,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;QACpF,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,OAAO,KAAK,OAAO,CAAC,sBAAsB,EAAE,CAAC;YAC/C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,yCAAyC,EAAE,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACvC,CAAC;AAED,gFAAgF;AAEhF,KAAK,UAAU,iBAAiB,CAAC,WAAmB,EAAE,GAAY,EAAE,OAAe;IACjF,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,QAAQ,aAAa,EAAE;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;YAC/D,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAM,CAAC;SACpC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,WAAmB,EACnB,SAAsD,EACtD,OAAe,EACf,IAA8B;IAE9B,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,QAAQ,eAAe,EAAE;YACtC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;YACzF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,kBAAkB;IACpB,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAqB;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C,mBAAmB;IACnB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAEhC,oDAAoD;IACpD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,sCAAsC,CAAC,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC,CAAC;QAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;IAE9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,sCAAsC,CAAC,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC,CAAC;QAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,wDAAwD;IACxD,IAAI,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACvD,MAAM,YAAY,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC5D,GAAG,GAAG,WAAW,CAAC,OAAO,CAAE,CAAC;QAC5B,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,WAAW,OAAO,CAAC,CAAC;IAClE,CAAC;IAED,gBAAgB;IAChB,MAAM,OAAO,GAAiB;QAC5B,aAAa,EAAE,CAAC;QAChB,oBAAoB,EAAE,wBAAwB,CAAC,OAAO,CAAC;QACvD,kBAAkB,EAAE,GAAG,CAAC,YAAY;QACpC,sBAAsB,EAAE,eAAe,CAAC,OAAO,CAAC;KACjD,CAAC;IAEF,8CAA8C;IAC9C,KAAK,aAAa,CAAC,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE;QAC9D,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM;KAC7B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAErD,8CAA8C;IAC9C,IAAI,UAAU,GAAyC,IAAI,CAAC;IAC5D,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,SAAS,gBAAgB;QACvB,IAAI,UAAU;YAAE,YAAY,CAAC,UAAU,CAAC,CAAC;QACzC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,cAAc,CAAC,GAAG,CAAC,CAAC;YACpB,GAAG,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC3C,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC3B,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAED,2CAA2C;IAC3C,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,SAAS,kBAAkB;QACzB,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,QAAQ,GAAG,KAAM;YAAE,OAAO;QACpC,QAAQ,GAAG,GAAG,CAAC;QACf,WAAW,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,KAAK,iBAAiB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,YAAY,GAAG,WAAW,CAAC,kBAAkB,EAAE,KAAM,CAAC,CAAC;IAE7D,mCAAmC;IACnC,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,gBAAgB,EAAE,CAAC;IACrB,CAAC,EAAE,sBAAsB,CAAC,CAAC;IAE3B,mDAAmD;IACnD,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CACtB,OAAO,EACP,EAAE,SAAS,EAAE,IAAI,EAAE,EACnB,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE;QACtB,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,iDAAiD;QACjD,IACE,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC;YAC/B,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC;YACnC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAC3B,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEzC,IAAI,UAAuC,CAAC;QAC5C,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,QAAQ,CAAC;QACxB,CAAC;QAED,uBAAuB;QACvB,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAE3B,uBAAuB;QACvB,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,aAAa,EAAE,CAAC;YACxB,6CAA6C;YAC7C,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;YAC5D,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;gBACzD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,EAAE;oBACX,UAAU,EAAE,CAAC;oBACb,KAAK,EAAE,CAAC;oBACR,IAAI,EAAE,CAAC;oBACP,GAAI,CAAC,EAAE,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAuB;iBACjD,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;aAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,yBAAyB;YACzB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QACtD,CAAC;QAED,gBAAgB,EAAE,CAAC;QAEnB,qDAAqD;QACrD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3F,IAAI,MAAM,EAAE,CAAC;YACX,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,MAAM,GAAG,CAAC,CAAC;YACvD,YAAY,EAAE;iBACX,IAAI,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;iBAC7C,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE;gBACvB,IAAI,CAAC,GAAG;oBAAE,OAAO;gBACjB,MAAM,IAAI,GAAG,OAAO,CAAC,kBAAkB,GAAG,cAAc,CAAC;gBACzD,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;oBACd,SAAS,CAAC,MAAM,EAAE,wBAAwB,IAAI,UAAU,cAAc,MAAM,CAAC,CAAC;gBAChF,CAAC;gBACD,0BAA0B;gBAC1B,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;gBAClC,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;gBAC1B,OAAO,CAAC,oBAAoB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;gBACjE,OAAO,CAAC,kBAAkB,GAAG,cAAc,CAAC;YAC9C,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE;gBACV,+BAA+B;YACjC,CAAC,CAAC,CAAC;QACP,CAAC;IACH,CAAC,CACF,CAAC;IAEF,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,aAAa,CAAC,YAAY,CAAC,CAAC;QAC5B,aAAa,CAAC,aAAa,CAAC,CAAC;QAC7B,IAAI,UAAU;YAAE,YAAY,CAAC,UAAU,CAAC,CAAC;QAEzC,kBAAkB;QAClB,IAAI,GAAG,EAAE,CAAC;YACR,cAAc,CAAC,GAAG,CAAC,CAAC;YACpB,GAAG,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC3C,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC3B,KAAK,iBAAiB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;QAED,4CAA4C;QAC5C,KAAK,aAAa,CAAC,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE;YAC5D,YAAY,EAAE,GAAG,EAAE,YAAY,IAAI,CAAC;YACpC,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { StackInfo } from '../scanner/stack-detector.js';
|
|
2
|
+
import type { FileAnalysis } from '../analyzer/imports-analyzer.js';
|
|
3
|
+
interface ClaudeMdOptions {
|
|
4
|
+
rootDir: string;
|
|
5
|
+
projectName: string;
|
|
6
|
+
stack: StackInfo;
|
|
7
|
+
files: FileAnalysis[];
|
|
8
|
+
healthScore: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function generateClaudeMd(opts: ClaudeMdOptions): {
|
|
11
|
+
main: string;
|
|
12
|
+
overflow: Record<string, string>;
|
|
13
|
+
};
|
|
14
|
+
export declare function writeClaudeMd(rootDir: string, content: {
|
|
15
|
+
main: string;
|
|
16
|
+
overflow: Record<string, string>;
|
|
17
|
+
}): void;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=claude-md.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../src/generator/claude-md.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AA6bD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CA4OA;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC1D,IAAI,CAUN"}
|