ft-scout 3.0.5 → 3.0.7

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.
@@ -1,82 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import chalk from 'chalk';
4
- import { spinner } from '@clack/prompts';
5
- import { generateCodeScanReport } from '../engine/llm.js';
6
- import { safeNote } from '../utils/markdown.js';
7
- import { loadContext } from '../utils/config.js';
8
- const FT_DIR = path.join(process.cwd(), '.ft');
9
- const SCAN_CACHE = path.join(FT_DIR, 'scan-report.json');
10
- export function saveScanReport(issues) {
11
- if (fs.existsSync(FT_DIR)) {
12
- fs.writeFileSync(SCAN_CACHE, JSON.stringify(issues, null, 2));
13
- }
14
- }
15
- export function loadScanReport() {
16
- if (!fs.existsSync(SCAN_CACHE))
17
- return [];
18
- try {
19
- return JSON.parse(fs.readFileSync(SCAN_CACHE, 'utf-8'));
20
- }
21
- catch {
22
- return [];
23
- }
24
- }
25
- export async function handleScan() {
26
- const s = spinner();
27
- s.start('Performing read-only bug & vulnerability scan across codebase...');
28
- const cwd = process.cwd();
29
- const context = loadContext();
30
- const projectName = context?.projectName || path.basename(cwd);
31
- const getFiles = (dir, depth = 2) => {
32
- let results = [];
33
- try {
34
- const list = fs.readdirSync(dir);
35
- for (const file of list) {
36
- if (['node_modules', '.git', 'dist', 'build', '.ft'].includes(file))
37
- continue;
38
- const fullPath = path.join(dir, file);
39
- const relPath = path.relative(cwd, fullPath);
40
- const stat = fs.statSync(fullPath);
41
- if (stat.isDirectory()) {
42
- if (depth > 1)
43
- results = results.concat(getFiles(fullPath, depth - 1));
44
- }
45
- else {
46
- results.push(relPath);
47
- }
48
- }
49
- }
50
- catch { }
51
- return results;
52
- };
53
- const filesList = getFiles(cwd, 2);
54
- let codeSample = '';
55
- const pkgPath = path.join(cwd, 'package.json');
56
- if (fs.existsSync(pkgPath)) {
57
- codeSample += fs.readFileSync(pkgPath, 'utf-8').slice(0, 1000) + '\n';
58
- }
59
- const issues = await generateCodeScanReport(projectName, filesList, codeSample);
60
- saveScanReport(issues);
61
- s.stop('Scan complete. Read-only report generated (no code modified).');
62
- const severityBadge = (sev) => {
63
- switch (sev.toLowerCase()) {
64
- case 'high':
65
- return chalk.bgRed.white.bold(' HIGH ');
66
- case 'medium':
67
- return chalk.bgYellow.black.bold(' MEDIUM ');
68
- default:
69
- return chalk.bgBlue.white.bold(' LOW ');
70
- }
71
- };
72
- const reportLines = issues.map((iss) => `${chalk.bold.cyan(`[Issue #${iss.id}]`)} ${severityBadge(iss.severity)} ${chalk.bold(iss.title)}\n` +
73
- ` • File: ${chalk.yellow(iss.file)}\n` +
74
- ` • Detail: ${iss.description}`);
75
- safeNote(`Found ${issues.length} potential issues matching past hotfix patterns:\n\n` +
76
- reportLines.join('\n\n') +
77
- `\n\n${chalk.bold.green('💡 How to Auto-Fix Any Issue:')}\n` +
78
- ` • Auto-fix Issue #${issues[0]?.id || 1}: ${chalk.bold.cyan(`scout fix --issue ${issues[0]?.id || 1}`)}\n` +
79
- ` • Auto-fix with short flag: ${chalk.bold.cyan(`scout fix -i ${issues[1]?.id || 2}`)}\n` +
80
- ` • Custom prompt auto-fix: ${chalk.bold.cyan('scout fix "Fix null check in src/index.ts"')}`, '🔍 FrontTerrain Codebase Bug Scan');
81
- }
82
- //# sourceMappingURL=scan.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scan.js","sourceRoot":"","sources":["scan.ts"],"names":[],"mappings":"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"}