@aionlabsai/aion 0.2.1 → 0.2.3
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/README.md +59 -0
- package/dist/agents/base-agent.d.ts.map +1 -1
- package/dist/agents/base-agent.js +23 -12
- package/dist/agents/base-agent.js.map +1 -1
- package/dist/agents/synthesizer.d.ts +3 -0
- package/dist/agents/synthesizer.d.ts.map +1 -1
- package/dist/agents/synthesizer.js +93 -52
- package/dist/agents/synthesizer.js.map +1 -1
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +87 -534
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/chat.d.ts.map +1 -1
- package/dist/cli/commands/chat.js +2 -1
- package/dist/cli/commands/chat.js.map +1 -1
- package/dist/cli/commands/context.d.ts +3 -0
- package/dist/cli/commands/context.d.ts.map +1 -0
- package/dist/cli/commands/context.js +72 -0
- package/dist/cli/commands/context.js.map +1 -0
- package/dist/cli/commands/next.d.ts +3 -0
- package/dist/cli/commands/next.d.ts.map +1 -0
- package/dist/cli/commands/next.js +49 -0
- package/dist/cli/commands/next.js.map +1 -0
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +52 -400
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/search.d.ts +3 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +50 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/tree.d.ts +3 -0
- package/dist/cli/commands/tree.d.ts.map +1 -0
- package/dist/cli/commands/tree.js +85 -0
- package/dist/cli/commands/tree.js.map +1 -0
- package/dist/cli/menu.d.ts.map +1 -1
- package/dist/cli/menu.js +99 -56
- package/dist/cli/menu.js.map +1 -1
- package/dist/cli/tui.d.ts +1 -0
- package/dist/cli/tui.d.ts.map +1 -1
- package/dist/cli/tui.js +7 -3
- package/dist/cli/tui.js.map +1 -1
- package/dist/core/cost-tracker.d.ts +10 -0
- package/dist/core/cost-tracker.d.ts.map +1 -1
- package/dist/core/cost-tracker.js +53 -0
- package/dist/core/cost-tracker.js.map +1 -1
- package/dist/core/pipelines/audit-pipeline.d.ts +4 -1
- package/dist/core/pipelines/audit-pipeline.d.ts.map +1 -1
- package/dist/core/pipelines/audit-pipeline.js +60 -30
- package/dist/core/pipelines/audit-pipeline.js.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/infra/audit-cache.d.ts +2 -1
- package/dist/infra/audit-cache.d.ts.map +1 -1
- package/dist/infra/audit-cache.js +18 -6
- package/dist/infra/audit-cache.js.map +1 -1
- package/dist/infra/audit-model.d.ts +72 -0
- package/dist/infra/audit-model.d.ts.map +1 -0
- package/dist/infra/audit-model.js +146 -0
- package/dist/infra/audit-model.js.map +1 -0
- package/dist/infra/audit-report-writer.d.ts +4 -0
- package/dist/infra/audit-report-writer.d.ts.map +1 -0
- package/dist/infra/audit-report-writer.js +290 -0
- package/dist/infra/audit-report-writer.js.map +1 -0
- package/dist/infra/code-metrics.d.ts +11 -0
- package/dist/infra/code-metrics.d.ts.map +1 -1
- package/dist/infra/code-metrics.js +62 -0
- package/dist/infra/code-metrics.js.map +1 -1
- package/dist/infra/embeddings.d.ts +2 -0
- package/dist/infra/embeddings.d.ts.map +1 -1
- package/dist/infra/embeddings.js +2 -2
- package/dist/infra/embeddings.js.map +1 -1
- package/dist/infra/project-report.d.ts +67 -0
- package/dist/infra/project-report.d.ts.map +1 -0
- package/dist/infra/project-report.js +159 -0
- package/dist/infra/project-report.js.map +1 -0
- package/dist/infra/repo-vectors.d.ts +31 -0
- package/dist/infra/repo-vectors.d.ts.map +1 -0
- package/dist/infra/repo-vectors.js +83 -0
- package/dist/infra/repo-vectors.js.map +1 -0
- package/dist/infra/update-check.d.ts +3 -0
- package/dist/infra/update-check.d.ts.map +1 -0
- package/dist/infra/update-check.js +84 -0
- package/dist/infra/update-check.js.map +1 -0
- package/dist/prompts/scanner.js +1 -1
- package/dist/prompts/synthesizer.d.ts.map +1 -1
- package/dist/prompts/synthesizer.js +7 -23
- package/dist/prompts/synthesizer.js.map +1 -1
- package/dist/providers/cli-provider.d.ts +1 -0
- package/dist/providers/cli-provider.d.ts.map +1 -1
- package/dist/providers/cli-provider.js +22 -2
- package/dist/providers/cli-provider.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,416 +1,68 @@
|
|
|
1
|
-
import { mkdirSync, writeFileSync, existsSync, readdirSync, readFileSync } from 'fs';
|
|
2
|
-
import { join } from 'path';
|
|
3
1
|
import { spawnSync } from 'child_process';
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
function esc(s) {
|
|
11
|
-
return String(s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { buildProjectReportData, latestAuditPointer, writeProjectReport } from '../../infra/project-report.js';
|
|
4
|
+
function openFile(path) {
|
|
5
|
+
const opener = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'cmd' : 'xdg-open';
|
|
6
|
+
const args = process.platform === 'win32' ? ['/c', 'start', '', path] : [path];
|
|
7
|
+
spawnSync(opener, args, { stdio: 'ignore', timeout: 5000 });
|
|
12
8
|
}
|
|
13
|
-
function
|
|
14
|
-
const
|
|
15
|
-
if (!
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const latest = join(dir, 'latest-audit.json');
|
|
19
|
-
if (existsSync(latest)) {
|
|
20
|
-
const pointer = JSON.parse(readFileSync(latest, 'utf8'));
|
|
21
|
-
const reportPath = pointer.report ?? (pointer.runDir ? join(pointer.runDir, 'report.json') : undefined);
|
|
22
|
-
if (reportPath && existsSync(reportPath)) {
|
|
23
|
-
return JSON.parse(readFileSync(reportPath, 'utf8'));
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
const files = readdirSync(dir).filter((f) => f.startsWith('audit-') && f.endsWith('.json')).sort().reverse();
|
|
27
|
-
if (!files[0])
|
|
28
|
-
return null;
|
|
29
|
-
return JSON.parse(readFileSync(join(dir, files[0]), 'utf8'));
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
return null;
|
|
9
|
+
function printLatest(cwd) {
|
|
10
|
+
const latest = latestAuditPointer(cwd);
|
|
11
|
+
if (!latest) {
|
|
12
|
+
console.log(chalk.yellow('No audit report found. Run: aion audit . --local-only'));
|
|
13
|
+
return;
|
|
33
14
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return `<tr>
|
|
50
|
-
<td class="mono">${esc(c.file)}</td>
|
|
51
|
-
<td style="color:${riskColor}">${c.commits}</td>
|
|
52
|
-
<td>${c.authors}</td>
|
|
53
|
-
<td><span class="badge" style="background:${riskColor}20;color:${riskColor}">${c.risk}</span></td>
|
|
54
|
-
</tr>`;
|
|
55
|
-
}).join('');
|
|
56
|
-
const patternRows = patterns.detected.map((p) => `<tr>
|
|
57
|
-
<td><strong>${esc(p.pattern)}</strong></td>
|
|
58
|
-
<td>${esc(p.category)}</td>
|
|
59
|
-
<td><span class="badge ${p.confidence}">${p.confidence}</span></td>
|
|
60
|
-
<td>${p.evidence.filter(Boolean).map((e) => esc(e)).join('<br>')}</td>
|
|
61
|
-
</tr>`).join('');
|
|
62
|
-
const antiRows = patterns.antiPatterns.map((a) => `<tr>
|
|
63
|
-
<td style="color:#f85149"><strong>${esc(a.name)}</strong></td>
|
|
64
|
-
<td>${esc(a.severity)}</td>
|
|
65
|
-
<td>${esc(a.description)}</td>
|
|
66
|
-
<td>${a.evidence.slice(0, 2).map((e) => esc(e)).join('<br>')}</td>
|
|
67
|
-
</tr>`).join('');
|
|
68
|
-
const cogRows = cognitive.slice(0, 15).map((c) => `<tr>
|
|
69
|
-
<td class="mono">${esc(c.file)}</td>
|
|
70
|
-
<td style="color:${c.score >= 40 ? '#f85149' : c.score >= 20 ? '#e3b341' : '#3fb950'}">${c.score}</td>
|
|
71
|
-
<td>${c.maxNesting}</td>
|
|
72
|
-
<td>${c.longFunctions}</td>
|
|
73
|
-
<td>${c.loc}</td>
|
|
74
|
-
</tr>`).join('');
|
|
75
|
-
const dimBars = health.dimensions.map((d) => {
|
|
76
|
-
const pct = d.score;
|
|
77
|
-
const color = pct >= 80 ? '#3fb950' : pct >= 60 ? '#e3b341' : '#f85149';
|
|
78
|
-
return `<div class="dim-row">
|
|
79
|
-
<div class="dim-name">${esc(d.name)}</div>
|
|
80
|
-
<div class="dim-bar-wrap"><div class="dim-bar" style="width:${pct}%;background:${color}"></div></div>
|
|
81
|
-
<div class="dim-score" style="color:${color}">${pct}</div>
|
|
82
|
-
<div class="dim-detail">${esc(d.detail)}</div>
|
|
83
|
-
</div>`;
|
|
84
|
-
}).join('');
|
|
85
|
-
return `<!DOCTYPE html>
|
|
86
|
-
<html lang="en">
|
|
87
|
-
<head>
|
|
88
|
-
<meta charset="UTF-8">
|
|
89
|
-
<title>${esc(projectName)} — Project Report</title>
|
|
90
|
-
<style>
|
|
91
|
-
*{box-sizing:border-box;margin:0;padding:0}
|
|
92
|
-
body{background:#0d1117;color:#e6edf3;font-family:-apple-system,BlinkMacSystemFont,sans-serif;font-size:14px;line-height:1.6}
|
|
93
|
-
a{color:#79c0ff;text-decoration:none}.mono{font-family:monospace;font-size:12px}
|
|
94
|
-
nav{background:#161b22;border-bottom:1px solid #30363d;padding:12px 24px;display:flex;gap:20px;position:sticky;top:0;z-index:100}
|
|
95
|
-
nav a{color:#8b949e;font-size:13px}nav a:hover{color:#e6edf3}
|
|
96
|
-
.container{max-width:1200px;margin:0 auto;padding:24px}
|
|
97
|
-
h1{font-size:24px;margin-bottom:4px}h2{font-size:18px;margin:32px 0 16px;color:#79c0ff;border-bottom:1px solid #21262d;padding-bottom:8px}
|
|
98
|
-
h3{font-size:14px;color:#8b949e;margin-bottom:12px}
|
|
99
|
-
.header{background:#161b22;border:1px solid #30363d;border-radius:12px;padding:24px;margin-bottom:24px;display:flex;justify-content:space-between;align-items:center}
|
|
100
|
-
.score-big{font-size:64px;font-weight:bold;color:${gradeColor};line-height:1}
|
|
101
|
-
.score-grade{font-size:32px;color:${gradeColor};margin-left:8px}
|
|
102
|
-
.meta{color:#8b949e;font-size:13px;margin-top:4px}
|
|
103
|
-
.dim-row{display:grid;grid-template-columns:140px 1fr 40px 1fr;gap:12px;align-items:center;margin:6px 0}
|
|
104
|
-
.dim-name{font-size:13px;color:#8b949e}.dim-bar-wrap{background:#21262d;border-radius:4px;height:8px}
|
|
105
|
-
.dim-bar{height:8px;border-radius:4px;transition:width 0.3s}.dim-score{font-size:13px;font-weight:bold;text-align:right}
|
|
106
|
-
.dim-detail{font-size:11px;color:#484f58}
|
|
107
|
-
table{width:100%;border-collapse:collapse;font-size:13px}
|
|
108
|
-
th{text-align:left;padding:8px 12px;border-bottom:2px solid #30363d;color:#8b949e;font-weight:600}
|
|
109
|
-
td{padding:8px 12px;border-bottom:1px solid #21262d;vertical-align:top}
|
|
110
|
-
tr:hover td{background:#161b22}.badge{display:inline-block;border-radius:4px;padding:2px 8px;font-size:11px;font-weight:600}
|
|
111
|
-
.badge.high{background:#3fb95020;color:#3fb950}.badge.medium{background:#e3b34120;color:#e3b341}.badge.low{background:#48495820;color:#8b949e}
|
|
112
|
-
.risk-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:24px}
|
|
113
|
-
.risk-card{background:#161b22;border:1px solid #30363d;border-radius:8px;padding:16px}
|
|
114
|
-
.risk-card .num{font-size:32px;font-weight:bold}.risk-card .label{color:#8b949e;font-size:12px}
|
|
115
|
-
.rec-card{background:#161b22;border:1px solid #30363d;border-radius:8px;padding:16px;margin-bottom:12px}
|
|
116
|
-
.rec-card h4{color:#79c0ff;margin-bottom:6px}.rec-card ul{margin-left:16px;color:#8b949e;font-size:13px}
|
|
117
|
-
.section{margin-bottom:40px}
|
|
118
|
-
</style>
|
|
119
|
-
</head>
|
|
120
|
-
<body>
|
|
121
|
-
<nav>
|
|
122
|
-
<a href="#health">Health</a>
|
|
123
|
-
<a href="#audit">Audit</a>
|
|
124
|
-
<a href="#patterns">Patterns</a>
|
|
125
|
-
<a href="#churn">Churn</a>
|
|
126
|
-
<a href="#cognitive">Complexity</a>
|
|
127
|
-
${data.graphExists ? '<a href="graph.html">Graph →</a>' : ''}
|
|
128
|
-
</nav>
|
|
129
|
-
<div class="container">
|
|
130
|
-
<div class="header">
|
|
131
|
-
<div>
|
|
132
|
-
<h1>${esc(projectName)}</h1>
|
|
133
|
-
<div class="meta">Generated ${esc(data.generatedAt)} · ${audit ? audit.totalFiles + ' files audited' : 'no audit data'}</div>
|
|
134
|
-
</div>
|
|
135
|
-
<div style="text-align:right">
|
|
136
|
-
<span class="score-big">${health.total}</span><span class="score-grade">${health.grade}</span>
|
|
137
|
-
<div class="meta">Health Score / 100</div>
|
|
138
|
-
</div>
|
|
139
|
-
</div>
|
|
140
|
-
|
|
141
|
-
<div class="section" id="health">
|
|
142
|
-
<h2>Health Dimensions</h2>
|
|
143
|
-
${dimBars}
|
|
144
|
-
${health.topRisks.length > 0 ? `<div style="margin-top:16px">${health.topRisks.map((r) => `<div style="color:#f85149;font-size:13px;margin:4px 0">✗ ${esc(r)}</div>`).join('')}</div>` : ''}
|
|
145
|
-
</div>
|
|
146
|
-
|
|
147
|
-
${audit ? `<div class="section" id="audit">
|
|
148
|
-
<h2>Audit Findings</h2>
|
|
149
|
-
<div class="risk-grid">
|
|
150
|
-
<div class="risk-card"><div class="num" style="color:#f85149">${audit.criticalCount}</div><div class="label">Critical</div></div>
|
|
151
|
-
<div class="risk-card"><div class="num" style="color:#e3b341">${audit.highCount}</div><div class="label">High</div></div>
|
|
152
|
-
<div class="risk-card"><div class="num">${audit.findings.length}</div><div class="label">Total Findings</div></div>
|
|
153
|
-
</div>
|
|
154
|
-
<p style="color:#8b949e;margin-bottom:16px;font-size:13px">${esc(audit.summary)}</p>
|
|
155
|
-
<table><tr><th>Severity</th><th>Location</th><th>Category</th><th>Finding</th></tr>${findingRows}</table>
|
|
156
|
-
${audit.findings.length > 50 ? `<p style="color:#8b949e;font-size:12px;margin-top:8px">Showing 50 of ${audit.findings.length} findings</p>` : ''}
|
|
157
|
-
</div>` : ''}
|
|
158
|
-
|
|
159
|
-
<div class="section" id="patterns">
|
|
160
|
-
<h2>Architecture Patterns</h2>
|
|
161
|
-
${patterns.detected.length > 0 ? `<h3>Detected</h3><table><tr><th>Pattern</th><th>Category</th><th>Confidence</th><th>Evidence</th></tr>${patternRows}</table>` : ''}
|
|
162
|
-
${patterns.antiPatterns.length > 0 ? `<h3 style="margin-top:20px">Anti-Patterns</h3><table><tr><th>Name</th><th>Severity</th><th>Description</th><th>Evidence</th></tr>${antiRows}</table>` : ''}
|
|
163
|
-
${patterns.recommendations.length > 0 ? `<h3 style="margin-top:20px">Recommendations</h3>${patterns.recommendations.map((r) => `<div class="rec-card"><h4>${esc(r.pattern)}</h4><p style="color:#8b949e;font-size:13px;margin-bottom:8px">${esc(r.reason)}</p><ul>${r.fixes.map((f) => `<li>${esc(f)}</li>`).join('')}</ul></div>`).join('')}` : ''}
|
|
164
|
-
</div>
|
|
165
|
-
|
|
166
|
-
${churn.churn.length > 0 ? `<div class="section" id="churn">
|
|
167
|
-
<h2>Git Churn (last ${churn.periodDays} days)</h2>
|
|
168
|
-
<p style="color:#8b949e;font-size:13px;margin-bottom:16px">${churn.totalCommits} total commits</p>
|
|
169
|
-
<table><tr><th>File</th><th>Commits</th><th>Authors</th><th>Risk</th></tr>${churnRows}</table>
|
|
170
|
-
</div>` : ''}
|
|
171
|
-
|
|
172
|
-
${cognitive.length > 0 ? `<div class="section" id="cognitive">
|
|
173
|
-
<h2>Cognitive Load</h2>
|
|
174
|
-
<table><tr><th>File</th><th>Score</th><th>Max Nesting</th><th>Long Functions</th><th>LOC</th></tr>${cogRows}</table>
|
|
175
|
-
</div>` : ''}
|
|
176
|
-
|
|
177
|
-
</div>
|
|
178
|
-
</body>
|
|
179
|
-
</html>`;
|
|
180
|
-
}
|
|
181
|
-
function renderMarkdown(data) {
|
|
182
|
-
const { projectName, health, audit, churn, patterns, cognitive, hotspots, apiEndpoints, envAudit, secrets, sbom } = data;
|
|
183
|
-
const lines = [];
|
|
184
|
-
lines.push(`# ${projectName} — AI Analysis Context`);
|
|
185
|
-
lines.push(`> Generated: ${data.generatedAt} · Use this document to ask an AI for refactoring, architecture, and improvement recommendations.`);
|
|
186
|
-
lines.push('');
|
|
187
|
-
// Health
|
|
188
|
-
lines.push(`## Health Score: ${health.total}/100 (${health.grade})`);
|
|
189
|
-
lines.push('');
|
|
190
|
-
lines.push('| Dimension | Score | Detail |');
|
|
191
|
-
lines.push('|---|---|---|');
|
|
192
|
-
health.dimensions.forEach((d) => lines.push(`| ${d.name} | ${d.score}/100 | ${d.detail} |`));
|
|
193
|
-
lines.push('');
|
|
194
|
-
if (health.topRisks.length > 0) {
|
|
195
|
-
lines.push('**Top risks:**');
|
|
196
|
-
health.topRisks.forEach((r) => lines.push(`- ${r}`));
|
|
197
|
-
lines.push('');
|
|
198
|
-
}
|
|
199
|
-
// Project overview
|
|
200
|
-
lines.push('## Project Overview');
|
|
201
|
-
lines.push(`- **Files:** ${data.totalFiles} | **Symbols:** ${data.totalSymbols}`);
|
|
202
|
-
lines.push(`- **Dependency cycles:** ${data.cycles}`);
|
|
203
|
-
lines.push(`- **Git commits (90d):** ${churn.totalCommits}`);
|
|
204
|
-
lines.push('');
|
|
205
|
-
// Architecture patterns
|
|
206
|
-
lines.push('## Architecture Patterns');
|
|
207
|
-
lines.push('');
|
|
208
|
-
lines.push('### Detected');
|
|
209
|
-
patterns.detected.forEach((p) => {
|
|
210
|
-
lines.push(`- **${p.pattern}** [${p.category}] (${p.confidence} confidence): ${p.evidence.filter(Boolean).join(', ')}`);
|
|
211
|
-
});
|
|
212
|
-
lines.push('');
|
|
213
|
-
if (patterns.antiPatterns.length > 0) {
|
|
214
|
-
lines.push('### Anti-Patterns');
|
|
215
|
-
patterns.antiPatterns.forEach((a) => {
|
|
216
|
-
lines.push(`- **${a.name}** [${a.severity}]: ${a.description}`);
|
|
217
|
-
a.evidence.slice(0, 2).forEach((e) => lines.push(` - \`${e}\``));
|
|
218
|
-
});
|
|
219
|
-
lines.push('');
|
|
220
|
-
}
|
|
221
|
-
if (patterns.recommendations.length > 0) {
|
|
222
|
-
lines.push('### Recommendations');
|
|
223
|
-
patterns.recommendations.forEach((r) => {
|
|
224
|
-
lines.push(`- **${r.pattern}** [${r.priority} priority]: ${r.reason}`);
|
|
225
|
-
r.fixes.forEach((f) => lines.push(` - ${f}`));
|
|
226
|
-
});
|
|
227
|
-
lines.push('');
|
|
228
|
-
}
|
|
229
|
-
// Hotspots
|
|
230
|
-
if (hotspots.length > 0) {
|
|
231
|
-
lines.push('## Hotspot Files (Highest Coupling)');
|
|
232
|
-
lines.push('');
|
|
233
|
-
lines.push('| File | FanIn | FanOut | Risk |');
|
|
234
|
-
lines.push('|---|---|---|---|');
|
|
235
|
-
hotspots.slice(0, 10).forEach((h) => {
|
|
236
|
-
const risk = h.fanIn >= 30 ? 'CRITICAL' : h.fanIn >= 15 ? 'HIGH' : 'MEDIUM';
|
|
237
|
-
lines.push(`| \`${h.file}\` | ${h.fanIn} | ${h.fanOut} | ${risk} |`);
|
|
238
|
-
});
|
|
239
|
-
lines.push('');
|
|
240
|
-
}
|
|
241
|
-
// Audit findings
|
|
242
|
-
if (audit) {
|
|
243
|
-
lines.push('## Audit Findings');
|
|
244
|
-
lines.push(`**${audit.criticalCount} critical · ${audit.highCount} high · ${audit.findings.length} total**`);
|
|
245
|
-
lines.push('');
|
|
246
|
-
lines.push(audit.summary);
|
|
247
|
-
lines.push('');
|
|
248
|
-
const critical = audit.findings.filter((f) => f.severity === 'critical');
|
|
249
|
-
const high = audit.findings.filter((f) => f.severity === 'high');
|
|
250
|
-
if (critical.length > 0) {
|
|
251
|
-
lines.push('### Critical Findings');
|
|
252
|
-
critical.forEach((f) => {
|
|
253
|
-
const persona = f.persona ? ` (persona: ${f.persona})` : '';
|
|
254
|
-
lines.push(`- \`${f.file}${f.line ? ':' + f.line : ''}\` [${f.category}]${persona} ${f.finding}`);
|
|
255
|
-
lines.push(` → ${f.recommendation}`);
|
|
256
|
-
});
|
|
257
|
-
lines.push('');
|
|
258
|
-
}
|
|
259
|
-
if (high.length > 0) {
|
|
260
|
-
lines.push('### High Findings');
|
|
261
|
-
high.slice(0, 15).forEach((f) => {
|
|
262
|
-
const persona = f.persona ? ` (persona: ${f.persona})` : '';
|
|
263
|
-
lines.push(`- \`${f.file}${f.line ? ':' + f.line : ''}\` [${f.category}]${persona} ${f.finding}`);
|
|
264
|
-
lines.push(` → ${f.recommendation}`);
|
|
265
|
-
});
|
|
266
|
-
lines.push('');
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
// Churn
|
|
270
|
-
if (churn.churn.length > 0) {
|
|
271
|
-
lines.push('## Git Churn (90 days)');
|
|
272
|
-
lines.push('');
|
|
273
|
-
lines.push('| File | Commits | Authors | Risk |');
|
|
274
|
-
lines.push('|---|---|---|---|');
|
|
275
|
-
churn.churn.slice(0, 15).forEach((c) => lines.push(`| \`${c.file}\` | ${c.commits} | ${c.authors} | ${c.risk} |`));
|
|
276
|
-
lines.push('');
|
|
277
|
-
const intersection = churn.busFactor
|
|
278
|
-
.filter((b) => b.risk === 'critical')
|
|
279
|
-
.filter((b) => churn.churn.find((c) => c.file === b.file && (c.risk === 'critical' || c.risk === 'high')));
|
|
280
|
-
if (intersection.length > 0) {
|
|
281
|
-
lines.push('### High Risk: High Churn + Single Author');
|
|
282
|
-
intersection.forEach((b) => lines.push(`- \`${b.file}\` — ${b.primaryPercent}% commits by one author`));
|
|
283
|
-
lines.push('');
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
// API Map (no-auth endpoints)
|
|
287
|
-
const noAuthEndpoints = apiEndpoints.filter((e) => !e.hasAuth);
|
|
288
|
-
if (noAuthEndpoints.length > 0) {
|
|
289
|
-
lines.push('## Unprotected API Endpoints');
|
|
290
|
-
lines.push('');
|
|
291
|
-
noAuthEndpoints.forEach((e) => {
|
|
292
|
-
lines.push(`- \`${e.method} ${e.path}\` — \`${e.file}:${e.line}\``);
|
|
293
|
-
});
|
|
294
|
-
lines.push('');
|
|
295
|
-
}
|
|
296
|
-
// Undocumented env vars
|
|
297
|
-
if (envAudit.undocumented.length > 0) {
|
|
298
|
-
lines.push('## Undocumented Environment Variables');
|
|
299
|
-
lines.push(`${envAudit.undocumented.length} variables used in code but not in .env.example:`);
|
|
300
|
-
lines.push('');
|
|
301
|
-
envAudit.undocumented.slice(0, 20).forEach((v) => lines.push(`- \`${v}\``));
|
|
302
|
-
lines.push('');
|
|
303
|
-
}
|
|
304
|
-
// Secrets
|
|
305
|
-
if (secrets.length > 0) {
|
|
306
|
-
lines.push('## Hardcoded Secrets Detected');
|
|
307
|
-
secrets.forEach((s) => lines.push(`- \`${s.file}:${s.line}\` [${s.pattern}]`));
|
|
308
|
-
lines.push('');
|
|
309
|
-
}
|
|
310
|
-
// Cognitive load
|
|
311
|
-
if (cognitive.length > 0) {
|
|
312
|
-
lines.push('## High Cognitive Load Files');
|
|
313
|
-
lines.push('');
|
|
314
|
-
lines.push('| File | Score | Max Nesting | Long Functions | LOC |');
|
|
315
|
-
lines.push('|---|---|---|---|---|');
|
|
316
|
-
cognitive.slice(0, 10).forEach((c) => lines.push(`| \`${c.file}\` | ${c.score} | ${c.maxNesting} | ${c.longFunctions} | ${c.loc} |`));
|
|
317
|
-
lines.push('');
|
|
318
|
-
}
|
|
319
|
-
// SBOM unpinned
|
|
320
|
-
if (sbom.unpinned.length > 0) {
|
|
321
|
-
lines.push('## Unpinned Dependencies (Supply Chain Risk)');
|
|
322
|
-
sbom.unpinned.slice(0, 20).forEach((p) => lines.push(`- \`${p.lang}\` \`${p.name}\` ${p.version}`));
|
|
323
|
-
lines.push('');
|
|
324
|
-
}
|
|
325
|
-
// AI prompt footer
|
|
326
|
-
lines.push('---');
|
|
327
|
-
lines.push('## Suggested AI Prompts');
|
|
328
|
-
lines.push('');
|
|
329
|
-
lines.push('Copy this document and use with any of these prompts:');
|
|
330
|
-
lines.push('');
|
|
331
|
-
lines.push('- *"Based on this analysis, create a prioritized refactoring roadmap with effort estimates"*');
|
|
332
|
-
lines.push('- *"Propose a migration plan from the current architecture to Clean Architecture + Repository Pattern"*');
|
|
333
|
-
lines.push('- *"Which critical findings should be fixed first and why? Write the fixes."*');
|
|
334
|
-
lines.push('- *"Identify which hotspot files should be split and how"*');
|
|
335
|
-
lines.push('- *"What tests should be written first given the 7% test coverage and these hotspots?"*');
|
|
336
|
-
return lines.join('\n');
|
|
15
|
+
console.log(chalk.bold.cyan('\nLatest Audit Report\n'));
|
|
16
|
+
if (latest.createdAt)
|
|
17
|
+
console.log(` created: ${latest.createdAt}`);
|
|
18
|
+
if (latest.runDir)
|
|
19
|
+
console.log(` run dir: ${latest.runDir}`);
|
|
20
|
+
if (latest.html)
|
|
21
|
+
console.log(` html: ${latest.html}`);
|
|
22
|
+
if (latest.digest)
|
|
23
|
+
console.log(` digest: ${latest.digest}`);
|
|
24
|
+
if (latest.aiContext)
|
|
25
|
+
console.log(` ai context: ${latest.aiContext}`);
|
|
26
|
+
console.log('');
|
|
27
|
+
console.log(chalk.bold('Recommended:'));
|
|
28
|
+
console.log(` Human review: ${chalk.cyan(latest.digest ?? latest.runDir ?? '')}`);
|
|
29
|
+
console.log(` Send to AI: ${chalk.cyan(latest.aiContext ?? '')}`);
|
|
337
30
|
}
|
|
338
31
|
export function registerReport(program) {
|
|
339
|
-
program
|
|
32
|
+
const report = program
|
|
340
33
|
.command('report')
|
|
341
|
-
.description('Generate full HTML + Markdown project report')
|
|
34
|
+
.description('Generate full HTML + Markdown project report, or inspect latest audit report');
|
|
35
|
+
report
|
|
36
|
+
.command('latest')
|
|
37
|
+
.description('Show the latest audit report paths and recommended files')
|
|
38
|
+
.option('--open', 'open latest HTML report')
|
|
39
|
+
.action((options) => {
|
|
40
|
+
const cwd = process.cwd();
|
|
41
|
+
const latest = latestAuditPointer(cwd);
|
|
42
|
+
printLatest(cwd);
|
|
43
|
+
if (options.open && latest?.html)
|
|
44
|
+
openFile(latest.html);
|
|
45
|
+
});
|
|
46
|
+
report
|
|
342
47
|
.option('--no-open', 'generate without opening browser')
|
|
343
48
|
.option('--md', 'generate only Markdown (AI-ready context file)')
|
|
344
49
|
.option('--days <n>', 'git lookback for churn analysis', '90')
|
|
345
50
|
.action(async (options) => {
|
|
346
51
|
const cwd = process.cwd();
|
|
347
52
|
const days = parseInt(options.days, 10) || 90;
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
const
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
const { buildPythonDepGraph } = await import('../../infra/dep-graph-python.js');
|
|
357
|
-
const lang = detectLang(cwd);
|
|
358
|
-
const dep = lang.lang === 'python' ? buildPythonDepGraph(cwd) : buildDepGraph(cwd);
|
|
359
|
-
hotspots = dep.hotspots;
|
|
360
|
-
}
|
|
361
|
-
catch { /* best-effort */ }
|
|
362
|
-
const audit = loadLatestAudit(cwd);
|
|
363
|
-
const churn = buildChurnReport(cwd, hotspots.map((h) => h.file), days);
|
|
364
|
-
const patterns = detectPatterns(cwd, hotspots);
|
|
365
|
-
const cognitive = measureCognitiveLoad(cwd, 30);
|
|
366
|
-
const apiEndpoints = buildApiMap(cwd);
|
|
367
|
-
const envAudit = auditEnvVars(cwd);
|
|
368
|
-
const secrets = scanCurrentSecrets(cwd);
|
|
369
|
-
const sbom = buildSbom(cwd);
|
|
370
|
-
let cycles = 0;
|
|
371
|
-
try {
|
|
372
|
-
const { detectLang } = await import('../../infra/lang-detect.js');
|
|
373
|
-
const { buildDepGraph } = await import('../../infra/dep-graph.js');
|
|
374
|
-
const { buildPythonDepGraph } = await import('../../infra/dep-graph-python.js');
|
|
375
|
-
const lang = detectLang(cwd);
|
|
376
|
-
const dep = lang.lang === 'python' ? buildPythonDepGraph(cwd) : buildDepGraph(cwd);
|
|
377
|
-
cycles = dep.cycles.length;
|
|
378
|
-
}
|
|
379
|
-
catch { /* best-effort */ }
|
|
380
|
-
const health = computeHealthScore({
|
|
381
|
-
totalFiles: index.stats.files, totalSymbols: index.stats.symbols,
|
|
382
|
-
cycles, hotspots: hotspots.length,
|
|
383
|
-
testFileRatio: index.files.filter((f) => f.isTest).length / Math.max(index.files.length, 1),
|
|
384
|
-
churn: churn.churn, busFactor: churn.busFactor, cognitiveLoad: cognitive,
|
|
385
|
-
patterns, auditCriticals: audit?.criticalCount, auditHighs: audit?.highCount,
|
|
386
|
-
});
|
|
387
|
-
const outDir = join(cwd, '.ai-runtime');
|
|
388
|
-
mkdirSync(outDir, { recursive: true });
|
|
389
|
-
const generatedAt = new Date().toLocaleString();
|
|
390
|
-
const mdData = { projectName, health, audit, churn, patterns, cognitive, generatedAt,
|
|
391
|
-
totalFiles: index.stats.files, totalSymbols: index.stats.symbols, cycles,
|
|
392
|
-
hotspots, apiEndpoints, envAudit, secrets, sbom };
|
|
393
|
-
// Always generate markdown
|
|
394
|
-
const md = renderMarkdown(mdData);
|
|
395
|
-
const mdFile = join(outDir, 'context.md');
|
|
396
|
-
writeFileSync(mdFile, md, 'utf8');
|
|
397
|
-
console.log(`Markdown: ${mdFile}`);
|
|
398
|
-
if (!options.md) {
|
|
399
|
-
const graphExists = existsSync(join(outDir, 'graph.html'));
|
|
400
|
-
const html = renderReport({ projectName, health, audit, churn, patterns, cognitive, graphExists, generatedAt });
|
|
401
|
-
const outFile = join(outDir, 'report.html');
|
|
402
|
-
writeFileSync(outFile, html, 'utf8');
|
|
403
|
-
console.log(`HTML: ${outFile}`);
|
|
404
|
-
if (options.open !== false) {
|
|
405
|
-
const opener = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'cmd' : 'xdg-open';
|
|
406
|
-
const args = process.platform === 'win32' ? ['/c', 'start', '', outFile] : [outFile];
|
|
407
|
-
spawnSync(opener, args, { stdio: 'ignore', timeout: 5000 });
|
|
408
|
-
}
|
|
53
|
+
console.log(`Building report for ${cwd.split('/').pop() ?? 'project'}...`);
|
|
54
|
+
const data = await buildProjectReportData(cwd, days);
|
|
55
|
+
const written = writeProjectReport(cwd, data, Boolean(options.md));
|
|
56
|
+
console.log(`Markdown: ${written.mdFile}`);
|
|
57
|
+
if (written.htmlFile) {
|
|
58
|
+
console.log(`HTML: ${written.htmlFile}`);
|
|
59
|
+
if (options.open !== false)
|
|
60
|
+
openFile(written.htmlFile);
|
|
409
61
|
}
|
|
410
|
-
console.log(` Health: ${health.badge}`);
|
|
411
|
-
if (audit)
|
|
412
|
-
console.log(` Findings: ${audit.criticalCount} critical, ${audit.highCount} high`);
|
|
413
|
-
console.log(` Size: ~${Math.round(md.length / 1000)}k chars (~${Math.round(md.length / 4)} tokens)`);
|
|
62
|
+
console.log(` Health: ${data.health.badge}`);
|
|
63
|
+
if (data.audit)
|
|
64
|
+
console.log(` Findings: ${data.audit.criticalCount} critical, ${data.audit.highCount} high`);
|
|
65
|
+
console.log(` Size: ~${Math.round(written.md.length / 1000)}k chars (~${Math.round(written.md.length / 4)} tokens)`);
|
|
414
66
|
});
|
|
415
67
|
}
|
|
416
68
|
//# sourceMappingURL=report.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8CrD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { GraphAgent } from '../../agents/graph-agent.js';
|
|
3
|
+
import { ensureRepoVectorIndex, queryRepoVectors } from '../../infra/repo-vectors.js';
|
|
4
|
+
export function registerSearch(program) {
|
|
5
|
+
program
|
|
6
|
+
.command('search <query...>')
|
|
7
|
+
.description('Search the repo index by file, symbol, and code chunks without AI tokens')
|
|
8
|
+
.option('--limit <n>', 'number of matches to show', '10')
|
|
9
|
+
.option('--semantic', 'use chunk-level semantic-style search over indexed code')
|
|
10
|
+
.option('--rebuild', 'rebuild the repository index before searching')
|
|
11
|
+
.action(async (queryWords, options) => {
|
|
12
|
+
const cwd = process.cwd();
|
|
13
|
+
const query = queryWords.join(' ');
|
|
14
|
+
const limit = Math.max(1, Math.min(50, parseInt(options.limit, 10) || 10));
|
|
15
|
+
const graph = new GraphAgent(cwd);
|
|
16
|
+
const index = options.rebuild ? await graph.buildIndex() : await graph.ensureIndex();
|
|
17
|
+
console.log(chalk.bold.cyan(`\nSearch: ${query}\n`));
|
|
18
|
+
if (options.semantic) {
|
|
19
|
+
const vectors = ensureRepoVectorIndex(cwd, index, Boolean(options.rebuild));
|
|
20
|
+
const results = queryRepoVectors(vectors, query, limit);
|
|
21
|
+
if (results.length === 0) {
|
|
22
|
+
console.log(chalk.yellow('No vector matches.'));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
results.forEach((item, i) => {
|
|
26
|
+
console.log(`${chalk.cyan(`${i + 1}.`)} ${chalk.bold(item.file)}:${item.startLine}-${item.endLine} ${chalk.gray(`[${item.type} ${item.score.toFixed(3)}]`)}`);
|
|
27
|
+
console.log(chalk.dim(` ${item.name}`));
|
|
28
|
+
if (item.text)
|
|
29
|
+
console.log(chalk.gray(item.text.split('\n').slice(0, 4).map((line) => ` ${line}`).join('\n')));
|
|
30
|
+
console.log();
|
|
31
|
+
});
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const result = graph.query(query, limit);
|
|
35
|
+
if (!result) {
|
|
36
|
+
console.log(chalk.yellow('No repository index available.'));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
result.files.forEach((file, i) => console.log(`${chalk.cyan(`${i + 1}.`)} ${chalk.bold(file.path)} ${chalk.gray(`${file.loc} loc${file.isTest ? ', test' : ''}`)}`));
|
|
40
|
+
if (result.symbols.length > 0) {
|
|
41
|
+
console.log(chalk.bold('\nSymbols:'));
|
|
42
|
+
result.symbols.forEach((symbol) => console.log(` ${chalk.cyan(symbol.name)} ${chalk.gray(symbol.kind)} ${symbol.file}:${symbol.line}`));
|
|
43
|
+
}
|
|
44
|
+
if (result.tests.length > 0) {
|
|
45
|
+
console.log(chalk.bold('\nProbable tests:'));
|
|
46
|
+
result.tests.forEach((link) => console.log(` ${link.source} <= ${link.tests.join(', ')}`));
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuEzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuBnD"}
|