@npm7381/agent-code-review 1.0.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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +75 -0
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +316 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/src/aiClient.d.ts +38 -0
  8. package/dist/src/aiClient.d.ts.map +1 -0
  9. package/dist/src/aiClient.js +180 -0
  10. package/dist/src/aiClient.js.map +1 -0
  11. package/dist/src/cache.d.ts +7 -0
  12. package/dist/src/cache.d.ts.map +1 -0
  13. package/dist/src/cache.js +50 -0
  14. package/dist/src/cache.js.map +1 -0
  15. package/dist/src/configLoader.d.ts +14 -0
  16. package/dist/src/configLoader.d.ts.map +1 -0
  17. package/dist/src/configLoader.js +26 -0
  18. package/dist/src/configLoader.js.map +1 -0
  19. package/dist/src/fileProcessor.d.ts +5 -0
  20. package/dist/src/fileProcessor.d.ts.map +1 -0
  21. package/dist/src/fileProcessor.js +78 -0
  22. package/dist/src/fileProcessor.js.map +1 -0
  23. package/dist/src/htmlFormatter.d.ts +12 -0
  24. package/dist/src/htmlFormatter.d.ts.map +1 -0
  25. package/dist/src/htmlFormatter.js +97 -0
  26. package/dist/src/htmlFormatter.js.map +1 -0
  27. package/dist/src/pdfFormatter.d.ts +11 -0
  28. package/dist/src/pdfFormatter.d.ts.map +1 -0
  29. package/dist/src/pdfFormatter.js +46 -0
  30. package/dist/src/pdfFormatter.js.map +1 -0
  31. package/dist/src/prompts.d.ts +3 -0
  32. package/dist/src/prompts.d.ts.map +1 -0
  33. package/dist/src/prompts.js +134 -0
  34. package/dist/src/prompts.js.map +1 -0
  35. package/dist/src/providerDetector.d.ts +20 -0
  36. package/dist/src/providerDetector.d.ts.map +1 -0
  37. package/dist/src/providerDetector.js +145 -0
  38. package/dist/src/providerDetector.js.map +1 -0
  39. package/dist/src/reviewGenerator.d.ts +8 -0
  40. package/dist/src/reviewGenerator.d.ts.map +1 -0
  41. package/dist/src/reviewGenerator.js +80 -0
  42. package/dist/src/reviewGenerator.js.map +1 -0
  43. package/dist/src/types.d.ts +34 -0
  44. package/dist/src/types.d.ts.map +1 -0
  45. package/dist/src/types.js +2 -0
  46. package/dist/src/types.js.map +1 -0
  47. package/package.json +45 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiClient.js","sourceRoot":"","sources":["../../src/aiClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CacheStore } from './types.js';
2
+ export declare function loadCache(projectRoot: string): CacheStore;
3
+ export declare function saveCache(projectRoot: string, cache: CacheStore): void;
4
+ export declare function computeFileHash(filePath: string): string;
5
+ export declare function isFileCached(filePath: string, cache: CacheStore, currentHash: string): boolean;
6
+ export declare function updateCache(filePath: string, reviewPath: string, hash: string, cache: CacheStore, content?: string): CacheStore;
7
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAWzD;AAED,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAQtE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAIT;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,UAAU,CAQZ"}
@@ -0,0 +1,50 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import crypto from 'crypto';
4
+ const CACHE_FILE = '.review-cache.json';
5
+ function getCachePath(projectRoot) {
6
+ return path.join(projectRoot, CACHE_FILE);
7
+ }
8
+ export function loadCache(projectRoot) {
9
+ const cachePath = getCachePath(projectRoot);
10
+ try {
11
+ if (fs.existsSync(cachePath)) {
12
+ const data = fs.readFileSync(cachePath, 'utf-8');
13
+ return JSON.parse(data);
14
+ }
15
+ }
16
+ catch {
17
+ // Corrupted cache, start fresh
18
+ }
19
+ return {};
20
+ }
21
+ export function saveCache(projectRoot, cache) {
22
+ const cachePath = getCachePath(projectRoot);
23
+ try {
24
+ fs.writeFileSync(cachePath, JSON.stringify(cache, null, 2), 'utf-8');
25
+ }
26
+ catch (err) {
27
+ const error = err;
28
+ console.warn(`[WARN] Could not save cache: ${error.message}`);
29
+ }
30
+ }
31
+ export function computeFileHash(filePath) {
32
+ const content = fs.readFileSync(filePath, 'utf-8');
33
+ return crypto.createHash('md5').update(content).digest('hex');
34
+ }
35
+ export function isFileCached(filePath, cache, currentHash) {
36
+ const entry = cache[filePath];
37
+ if (!entry)
38
+ return false;
39
+ return entry.hash === currentHash;
40
+ }
41
+ export function updateCache(filePath, reviewPath, hash, cache, content) {
42
+ cache[filePath] = {
43
+ hash,
44
+ reviewPath,
45
+ content,
46
+ timestamp: Date.now(),
47
+ };
48
+ return cache;
49
+ }
50
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAExC,SAAS,YAAY,CAAC,WAAmB;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,WAAmB;IAC3C,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAe,CAAC;QACxC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,WAAmB,EAAE,KAAiB;IAC9D,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAAY,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAAgB,EAChB,KAAiB,EACjB,WAAmB;IAEnB,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,QAAgB,EAChB,UAAkB,EAClB,IAAY,EACZ,KAAiB,EACjB,OAAgB;IAEhB,KAAK,CAAC,QAAQ,CAAC,GAAG;QAChB,IAAI;QACJ,UAAU;QACV,OAAO;QACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface RCConfig {
2
+ provider?: string;
3
+ model?: string;
4
+ baseUrl?: string;
5
+ maxChars?: number;
6
+ extensions?: string[];
7
+ format?: string;
8
+ output?: string;
9
+ dryRun?: boolean;
10
+ verbose?: boolean;
11
+ }
12
+ export declare function loadConfigFile(projectRoot: string): RCConfig | null;
13
+ export declare function mergeConfig<T>(cliValue: T | undefined, configValue: T | undefined, defaultValue: T): T;
14
+ //# sourceMappingURL=configLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configLoader.d.ts","sourceRoot":"","sources":["../../src/configLoader.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAID,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAWnE;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAItG"}
@@ -0,0 +1,26 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ const CONFIG_FILE = '.aiconfig.json';
4
+ export function loadConfigFile(projectRoot) {
5
+ const configPath = path.join(projectRoot, CONFIG_FILE);
6
+ try {
7
+ if (!fs.existsSync(configPath))
8
+ return null;
9
+ const raw = fs.readFileSync(configPath, 'utf-8');
10
+ const config = JSON.parse(raw);
11
+ if (typeof config !== 'object' || config === null)
12
+ return null;
13
+ return config;
14
+ }
15
+ catch {
16
+ return null;
17
+ }
18
+ }
19
+ export function mergeConfig(cliValue, configValue, defaultValue) {
20
+ if (cliValue !== undefined)
21
+ return cliValue;
22
+ if (configValue !== undefined)
23
+ return configValue;
24
+ return defaultValue;
25
+ }
26
+ //# sourceMappingURL=configLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configLoader.js","sourceRoot":"","sources":["../../src/configLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAcxB,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAErC,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAa,CAAC;QAC3C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/D,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,QAAuB,EAAE,WAA0B,EAAE,YAAe;IACjG,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC5C,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAClD,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { FileData } from './types.js';
2
+ export declare function collectFiles(targetPath: string, verbose?: boolean, extensions?: string[]): string[];
3
+ export declare function readFile(filePath: string): FileData | null;
4
+ export declare function shouldSkipContent(content: string): boolean;
5
+ //# sourceMappingURL=fileProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileProcessor.d.ts","sourceRoot":"","sources":["../../src/fileProcessor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAS3C,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAqB1G;AAkCD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAU1D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAK1D"}
@@ -0,0 +1,78 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ const DEFAULT_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.prisma']);
4
+ const IGNORED_DIRS = new Set([
5
+ 'node_modules', '.next', 'dist', 'build', '.git',
6
+ '.cache', 'coverage', '.turbo', '__pycache__',
7
+ ]);
8
+ export function collectFiles(targetPath, verbose = false, extensions) {
9
+ const resolvedPath = path.resolve(targetPath);
10
+ const stats = fs.statSync(resolvedPath);
11
+ const validExts = extensions ? new Set(extensions.map(e => e.startsWith('.') ? e : `.${e}`)) : DEFAULT_EXTENSIONS;
12
+ if (stats.isFile()) {
13
+ if (!isValidExtension(resolvedPath, validExts)) {
14
+ console.warn(`[WARN] Skipping unsupported file type: ${resolvedPath}`);
15
+ return [];
16
+ }
17
+ if (verbose)
18
+ console.log(`[INFO] Processing single file: ${resolvedPath}`);
19
+ return [resolvedPath];
20
+ }
21
+ if (stats.isDirectory()) {
22
+ if (verbose)
23
+ console.log(`[INFO] Scanning directory: ${resolvedPath}`);
24
+ return collectDirRecursive(resolvedPath, verbose, validExts);
25
+ }
26
+ console.error(`[ERROR] Path is neither file nor directory: ${resolvedPath}`);
27
+ return [];
28
+ }
29
+ function collectDirRecursive(dirPath, verbose, validExts) {
30
+ const files = [];
31
+ try {
32
+ const entries = fs.readdirSync(dirPath, { withFileTypes: true });
33
+ for (const entry of entries) {
34
+ const fullPath = path.join(dirPath, entry.name);
35
+ if (entry.isDirectory()) {
36
+ if (IGNORED_DIRS.has(entry.name)) {
37
+ if (verbose)
38
+ console.log(`[INFO] Skipping directory: ${entry.name}`);
39
+ continue;
40
+ }
41
+ files.push(...collectDirRecursive(fullPath, verbose, validExts));
42
+ }
43
+ else if (entry.isFile() && isValidExtension(fullPath, validExts)) {
44
+ files.push(fullPath);
45
+ }
46
+ }
47
+ }
48
+ catch (err) {
49
+ const error = err;
50
+ console.error(`[ERROR] Cannot read directory ${dirPath}: ${error.message}`);
51
+ }
52
+ return files;
53
+ }
54
+ function isValidExtension(filePath, validExts) {
55
+ const ext = path.extname(filePath).toLowerCase();
56
+ return validExts.has(ext);
57
+ }
58
+ export function readFile(filePath) {
59
+ try {
60
+ const content = fs.readFileSync(filePath, 'utf-8');
61
+ const relativePath = path.relative(process.cwd(), filePath);
62
+ return { filePath, relativePath, content };
63
+ }
64
+ catch (err) {
65
+ const error = err;
66
+ console.error(`[ERROR] Cannot read file ${filePath}: ${error.message}`);
67
+ return null;
68
+ }
69
+ }
70
+ export function shouldSkipContent(content) {
71
+ const trimmed = content.trim();
72
+ if (!trimmed)
73
+ return true;
74
+ if (trimmed.startsWith('// @ts-nocheck') && trimmed.length < 50)
75
+ return true;
76
+ return false;
77
+ }
78
+ //# sourceMappingURL=fileProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileProcessor.js","sourceRoot":"","sources":["../../src/fileProcessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface ReviewEntry {
2
+ relativePath: string;
3
+ filePath: string;
4
+ results: {
5
+ severity: string;
6
+ category: string;
7
+ line?: number;
8
+ suggestion: string;
9
+ }[];
10
+ }
11
+ export declare function generateHtmlReport(entries: ReviewEntry[], agentName: string): string;
12
+ //# sourceMappingURL=htmlFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlFormatter.d.ts","sourceRoot":"","sources":["../../src/htmlFormatter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACtF;AAcD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAkFpF"}
@@ -0,0 +1,97 @@
1
+ function severityClass(severity) {
2
+ if (severity === 'critical')
3
+ return 'severity-critical';
4
+ if (severity === 'warning')
5
+ return 'severity-warning';
6
+ return 'severity-info';
7
+ }
8
+ function severityIcon(severity) {
9
+ if (severity === 'critical')
10
+ return '🔴';
11
+ if (severity === 'warning')
12
+ return '🟡';
13
+ return '🟢';
14
+ }
15
+ export function generateHtmlReport(entries, agentName) {
16
+ const allResults = entries.flatMap(e => e.results);
17
+ const critical = allResults.filter(r => r.severity === 'critical');
18
+ const warnings = allResults.filter(r => r.severity === 'warning');
19
+ const info = allResults.filter(r => r.severity === 'info');
20
+ const filesHtml = entries.map(entry => {
21
+ if (entry.results.length === 0)
22
+ return '';
23
+ const resultsHtml = entry.results.map(r => {
24
+ const lineInfo = r.line ? `:${r.line}` : '';
25
+ return `<tr class="${severityClass(r.severity)}">
26
+ <td class="severity-col">${severityIcon(r.severity)} ${r.severity}</td>
27
+ <td>${r.category}${lineInfo}</td>
28
+ <td>${r.suggestion}</td>
29
+ </tr>`;
30
+ }).join('\n');
31
+ return `<div class="file-section">
32
+ <h2>${entry.relativePath}</h2>
33
+ <table>
34
+ <thead><tr><th>Severidad</th><th>Categoría</th><th>Sugerencia</th></tr></thead>
35
+ <tbody>${resultsHtml}</tbody>
36
+ </table>
37
+ </div>`;
38
+ }).join('\n');
39
+ return `<!DOCTYPE html>
40
+ <html lang="es">
41
+ <head>
42
+ <meta charset="UTF-8">
43
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
44
+ <title>${agentName} - Reporte</title>
45
+ <style>
46
+ * { margin: 0; padding: 0; box-sizing: border-box; }
47
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: #1a1a2e; background: #f5f6fa; padding: 2rem; }
48
+ .container { max-width: 1100px; margin: 0 auto; }
49
+ header { background: linear-gradient(135deg, #1a1a2e, #16213e); color: #fff; padding: 2rem; border-radius: 12px; margin-bottom: 2rem; }
50
+ header h1 { font-size: 1.8rem; margin-bottom: .5rem; }
51
+ header .meta { color: #a0aec0; font-size: .9rem; }
52
+ .summary { display: flex; gap: 1rem; margin-bottom: 2rem; }
53
+ .summary-card { flex: 1; background: #fff; padding: 1.5rem; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,.06); text-align: center; }
54
+ .summary-card .count { font-size: 2rem; font-weight: 700; }
55
+ .summary-card .label { font-size: .85rem; color: #718096; margin-top: .25rem; }
56
+ .summary-card.critical { border-top: 4px solid #e53e3e; }
57
+ .summary-card.warning { border-top: 4px solid #d69e2e; }
58
+ .summary-card.info { border-top: 4px solid #38a169; }
59
+ .file-section { background: #fff; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,.06); padding: 1.5rem; margin-bottom: 1.5rem; }
60
+ .file-section h2 { font-size: 1.1rem; color: #2d3748; margin-bottom: 1rem; padding-bottom: .5rem; border-bottom: 2px solid #edf2f7; }
61
+ table { width: 100%; border-collapse: collapse; }
62
+ th { text-align: left; padding: .75rem .5rem; font-size: .8rem; text-transform: uppercase; color: #718096; border-bottom: 2px solid #edf2f7; }
63
+ td { padding: .75rem .5rem; border-bottom: 1px solid #f7fafc; font-size: .9rem; }
64
+ .severity-col { white-space: nowrap; font-weight: 600; }
65
+ .severity-critical td:first-child { color: #e53e3e; }
66
+ .severity-warning td:first-child { color: #d69e2e; }
67
+ .severity-info td:first-child { color: #38a169; }
68
+ footer { text-align: center; color: #a0aec0; font-size: .8rem; margin-top: 2rem; }
69
+ </style>
70
+ </head>
71
+ <body>
72
+ <div class="container">
73
+ <header>
74
+ <h1>${agentName}</h1>
75
+ <p class="meta">Generado: ${new Date().toLocaleString('es-AR')} • Archivos revisados: ${entries.length}</p>
76
+ </header>
77
+ <div class="summary">
78
+ <div class="summary-card critical">
79
+ <div class="count">${critical.length}</div>
80
+ <div class="label">🔴 Críticos</div>
81
+ </div>
82
+ <div class="summary-card warning">
83
+ <div class="count">${warnings.length}</div>
84
+ <div class="label">🟡 Advertencias</div>
85
+ </div>
86
+ <div class="summary-card info">
87
+ <div class="count">${info.length}</div>
88
+ <div class="label">🟢 Info</div>
89
+ </div>
90
+ </div>
91
+ ${filesHtml}
92
+ <footer>Generado por ${agentName} • AI Agent Toolkit</footer>
93
+ </div>
94
+ </body>
95
+ </html>`;
96
+ }
97
+ //# sourceMappingURL=htmlFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlFormatter.js","sourceRoot":"","sources":["../../src/htmlFormatter.ts"],"names":[],"mappings":"AAMA,SAAS,aAAa,CAAC,QAAgB;IACrC,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,mBAAmB,CAAC;IACxD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,kBAAkB,CAAC;IACtD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAsB,EAAE,SAAiB;IAC1E,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IAE3D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACpC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACxC,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,OAAO,cAAc,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC;mCACjB,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ;cAC3D,CAAC,CAAC,QAAQ,GAAG,QAAQ;cACrB,CAAC,CAAC,UAAU;YACd,CAAC;QACT,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO;YACC,KAAK,CAAC,YAAY;;;iBAGb,WAAW;;WAEjB,CAAC;IACV,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;;;WAKE,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA8BR,SAAS;kCACa,IAAI,IAAI,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,0BAA0B,OAAO,CAAC,MAAM;;;;6BAI/E,QAAQ,CAAC,MAAM;;;;6BAIf,QAAQ,CAAC,MAAM;;;;6BAIf,IAAI,CAAC,MAAM;;;;MAIlC,SAAS;2BACY,SAAS;;;QAG5B,CAAC;AACT,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface PdfEntry {
2
+ relativePath: string;
3
+ results: {
4
+ severity: string;
5
+ category: string;
6
+ line?: number;
7
+ suggestion: string;
8
+ }[];
9
+ }
10
+ export declare function generatePdfReport(entries: PdfEntry[], outputPath: string, agentName: string): Promise<void>;
11
+ //# sourceMappingURL=pdfFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdfFormatter.d.ts","sourceRoot":"","sources":["../../src/pdfFormatter.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACtF;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CjH"}
@@ -0,0 +1,46 @@
1
+ import PDFDocument from 'pdfkit';
2
+ export async function generatePdfReport(entries, outputPath, agentName) {
3
+ const doc = new PDFDocument({ margin: 50, size: 'A4' });
4
+ const stream = require('fs').createWriteStream(outputPath);
5
+ doc.pipe(stream);
6
+ const allResults = entries.flatMap(e => e.results);
7
+ const critical = allResults.filter(r => r.severity === 'critical');
8
+ const warnings = allResults.filter(r => r.severity === 'warning');
9
+ const info = allResults.filter(r => r.severity === 'info');
10
+ doc.fontSize(22).font('Helvetica-Bold').text(agentName, { align: 'center' });
11
+ doc.fontSize(12).font('Helvetica').text(`Generado: ${new Date().toLocaleString('es-AR')}`, { align: 'center' });
12
+ doc.moveDown(1.5);
13
+ doc.fontSize(14).font('Helvetica-Bold').text('Resumen');
14
+ doc.moveDown(0.5);
15
+ doc.fontSize(11).font('Helvetica');
16
+ doc.text(`Archivos revisados: ${entries.length}`);
17
+ doc.text(`Críticos: ${critical.length}`);
18
+ doc.text(`Advertencias: ${warnings.length}`);
19
+ doc.text(`Info: ${info.length}`);
20
+ doc.moveDown(1);
21
+ for (const entry of entries) {
22
+ if (entry.results.length === 0)
23
+ continue;
24
+ if (doc.y > 700)
25
+ doc.addPage();
26
+ doc.fontSize(13).font('Helvetica-Bold').text(entry.relativePath);
27
+ doc.moveDown(0.3);
28
+ for (const r of entry.results) {
29
+ if (doc.y > 720)
30
+ doc.addPage();
31
+ const lineInfo = r.line ? `:${r.line}` : '';
32
+ const sevMap = { critical: 'CRIT', warning: 'WARN', info: 'INFO' };
33
+ doc.fontSize(9).font('Helvetica-Bold').fillColor('#333').text(`[${sevMap[r.severity] || 'INFO'}] [${r.category}]${lineInfo}`);
34
+ doc.fontSize(9).font('Helvetica').fillColor('#555').text(r.suggestion, { indent: 12 });
35
+ doc.moveDown(0.3);
36
+ }
37
+ doc.moveDown(0.5);
38
+ }
39
+ doc.fontSize(9).font('Helvetica').fillColor('#999').text(`Generado por ${agentName} • AI Agent Toolkit`, { align: 'center' });
40
+ doc.end();
41
+ return new Promise((resolve, reject) => {
42
+ stream.on('finish', resolve);
43
+ stream.on('error', reject);
44
+ });
45
+ }
46
+ //# sourceMappingURL=pdfFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdfFormatter.js","sourceRoot":"","sources":["../../src/pdfFormatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const SYSTEM_PROMPT = "You are an expert code reviewer. Your task is to analyze source code and provide actionable feedback organized by severity level.\n\n## Categories to analyze:\n- **Bugs**: Potential bugs (null references, type errors, logic errors, race conditions)\n- **Security**: Security vulnerabilities (SQL injection, XSS, secrets hardcodeados, path traversal)\n- **Performance**: Performance issues (unnecessary re-renders, N+1 queries, missing indexes, memory leaks)\n- **Dead Code**: Unused imports, unused variables, unreachable code, commented-out code\n- **TypeScript**: Bad TypeScript practices (any type, missing null checks, loose typing)\n- **Maintainability**: Code complexity, long functions, magic numbers, missing error handling\n- **Refactoring**: Suggestions for cleaner code structure, extract functions, simplify logic\n\n## Severity levels:\n- \uD83D\uDD34 **critical**: Bugs that will cause errors, security vulnerabilities, data loss risks\n- \uD83D\uDFE1 **warning**: Code smells, performance issues, potential bugs in edge cases\n- \uD83D\uDFE2 **info**: Style suggestions, minor improvements, best practices\n\n## Response format:\nReturn ONLY a JSON array of review findings. Each finding must have:\n- \"severity\": \"critical\" | \"warning\" | \"info\"\n- \"category\": one of the categories above\n- \"line\": line number (number) or null if file-level\n- \"suggestion\": clear, actionable description of the issue and how to fix it\n\nExample:\n[\n {\"severity\": \"warning\", \"category\": \"Security\", \"line\": 15, \"suggestion\": \"Use parameterized queries instead of string concatenation to prevent SQL injection\"},\n {\"severity\": \"info\", \"category\": \"TypeScript\", \"line\": 8, \"suggestion\": \"Replace 'any' type with specific type for better type safety\"}\n]\n\nReturn ONLY the JSON array. No extra text, no markdown code blocks.";
2
+ export declare const getFileTypePrompt: (filePath: string, content: string) => string;
3
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/prompts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,k1DA6B0C,CAAC;AAErE,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,EAAE,SAAS,MAAM,KAAG,MAiGrE,CAAC"}
@@ -0,0 +1,134 @@
1
+ export const SYSTEM_PROMPT = `You are an expert code reviewer. Your task is to analyze source code and provide actionable feedback organized by severity level.
2
+
3
+ ## Categories to analyze:
4
+ - **Bugs**: Potential bugs (null references, type errors, logic errors, race conditions)
5
+ - **Security**: Security vulnerabilities (SQL injection, XSS, secrets hardcodeados, path traversal)
6
+ - **Performance**: Performance issues (unnecessary re-renders, N+1 queries, missing indexes, memory leaks)
7
+ - **Dead Code**: Unused imports, unused variables, unreachable code, commented-out code
8
+ - **TypeScript**: Bad TypeScript practices (any type, missing null checks, loose typing)
9
+ - **Maintainability**: Code complexity, long functions, magic numbers, missing error handling
10
+ - **Refactoring**: Suggestions for cleaner code structure, extract functions, simplify logic
11
+
12
+ ## Severity levels:
13
+ - 🔴 **critical**: Bugs that will cause errors, security vulnerabilities, data loss risks
14
+ - 🟡 **warning**: Code smells, performance issues, potential bugs in edge cases
15
+ - 🟢 **info**: Style suggestions, minor improvements, best practices
16
+
17
+ ## Response format:
18
+ Return ONLY a JSON array of review findings. Each finding must have:
19
+ - "severity": "critical" | "warning" | "info"
20
+ - "category": one of the categories above
21
+ - "line": line number (number) or null if file-level
22
+ - "suggestion": clear, actionable description of the issue and how to fix it
23
+
24
+ Example:
25
+ [
26
+ {"severity": "warning", "category": "Security", "line": 15, "suggestion": "Use parameterized queries instead of string concatenation to prevent SQL injection"},
27
+ {"severity": "info", "category": "TypeScript", "line": 8, "suggestion": "Replace 'any' type with specific type for better type safety"}
28
+ ]
29
+
30
+ Return ONLY the JSON array. No extra text, no markdown code blocks.`;
31
+ export const getFileTypePrompt = (filePath, content) => {
32
+ if (content.includes('@prisma/client') || filePath.includes('schema.prisma')) {
33
+ return createPrompt('Prisma Schema', `
34
+ Analyze this Prisma schema for:
35
+ - Missing indexes on frequently queried fields
36
+ - Inefficient relation definitions
37
+ - Missing @unique constraints where needed
38
+ - Field type mismatches with expected data`);
39
+ }
40
+ if (content.includes('export const') && (content.includes('z.object') || content.includes('z.string'))) {
41
+ return createPrompt('Zod Validation Schema', `
42
+ Analyze this Zod schema for:
43
+ - Missing validation rules (min, max, regex)
44
+ - Overly permissive validation
45
+ - Missing error messages for user-facing validation
46
+ - Type inference issues`);
47
+ }
48
+ if (content.includes('@tanstack/react-query') || content.includes('useQuery') || content.includes('useMutation')) {
49
+ return createPrompt('React Query Hook', `
50
+ Analyze this React Query code for:
51
+ - Missing error handling
52
+ - Cache invalidation issues
53
+ - Stale data problems
54
+ - Missing loading states
55
+ - Race conditions in mutations`);
56
+ }
57
+ if (content.includes('React.createContext') || content.includes('createContext') || content.includes('.Provider')) {
58
+ return createPrompt('React Context Provider', `
59
+ Analyze this React Context for:
60
+ - Unnecessary re-renders
61
+ - Missing memoization
62
+ - Context value stability
63
+ - Missing error boundaries`);
64
+ }
65
+ if (content.includes('React.FC') || content.includes('(): JSX') || (content.includes('=> {') && content.includes('<') && content.includes('/>'))) {
66
+ return createPrompt('React Component', `
67
+ Analyze this React component for:
68
+ - Missing key props in lists
69
+ - Unnecessary re-renders
70
+ - Missing error boundaries
71
+ - Inline function definitions in JSX
72
+ - Missing TypeScript types for props
73
+ - Direct DOM manipulation`);
74
+ }
75
+ if (content.includes('Request, Response') || content.includes('express.Router') || content.includes('RequestHandler')) {
76
+ return createPrompt('Express Route / Controller', `
77
+ Analyze this Express route for:
78
+ - Missing input validation
79
+ - SQL/NoSQL injection vulnerabilities
80
+ - Missing authentication/authorization checks
81
+ - Unhandled promise rejections
82
+ - Missing rate limiting
83
+ - Exposed sensitive data in responses`);
84
+ }
85
+ if (content.includes('export function') || content.includes('export const') || content.includes('export async function')) {
86
+ return createPrompt('Utility / Service Module', `
87
+ Analyze this utility module for:
88
+ - Missing error handling
89
+ - Potential null/undefined references
90
+ - Inefficient algorithms
91
+ - Missing input validation
92
+ - Side effects in pure functions`);
93
+ }
94
+ if (content.includes('interface ') || content.includes('type ') || filePath.includes('types/')) {
95
+ return createPrompt('TypeScript Types', `
96
+ Analyze these TypeScript types for:
97
+ - Overuse of 'any' type
98
+ - Missing optional markers
99
+ - Inconsistent naming conventions
100
+ - Missing JSDoc documentation
101
+ - Loose union types`);
102
+ }
103
+ if (content.includes('socket.io') || content.includes('io(') || content.includes('Server as SocketIOServer')) {
104
+ return createPrompt('Socket.IO Handler', `
105
+ Analyze this Socket.IO code for:
106
+ - Missing authentication on connections
107
+ - Missing input validation on events
108
+ - Memory leaks from uncleaned listeners
109
+ - Missing rate limiting
110
+ - Room management issues`);
111
+ }
112
+ return createPrompt('Generic Module', `
113
+ Analyze this module for:
114
+ - Missing error handling
115
+ - Potential bugs
116
+ - Code quality issues
117
+ - Performance concerns
118
+ - Security vulnerabilities`);
119
+ };
120
+ function createPrompt(fileType, specificInstructions) {
121
+ return `${SYSTEM_PROMPT}
122
+
123
+ ## File Type: ${fileType}
124
+
125
+ ${specificInstructions}
126
+
127
+ ## Code to review:
128
+ \`\`\`
129
+ {CODE}
130
+ \`\`\`
131
+
132
+ Return ONLY the JSON array of review findings. No extra text.`;
133
+ }
134
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/prompts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEA6BuC,CAAC;AAErE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAE,OAAe,EAAU,EAAE;IAC7E,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC7E,OAAO,YAAY,CAAC,eAAe,EAAE;;;;;2CAKE,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACvG,OAAO,YAAY,CAAC,uBAAuB,EAAE;;;;;wBAKzB,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACjH,OAAO,YAAY,CAAC,kBAAkB,EAAE;;;;;;+BAMb,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAClH,OAAO,YAAY,CAAC,wBAAwB,EAAE;;;;;2BAKvB,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACjJ,OAAO,YAAY,CAAC,iBAAiB,EAAE;;;;;;;0BAOjB,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACtH,OAAO,YAAY,CAAC,4BAA4B,EAAE;;;;;;;sCAOhB,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACzH,OAAO,YAAY,CAAC,0BAA0B,EAAE;;;;;;iCAMnB,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/F,OAAO,YAAY,CAAC,kBAAkB,EAAE;;;;;;oBAMxB,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;QAC7G,OAAO,YAAY,CAAC,mBAAmB,EAAE;;;;;;yBAMpB,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,YAAY,CAAC,gBAAgB,EAAE;;;;;;2BAMb,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,SAAS,YAAY,CAAC,QAAgB,EAAE,oBAA4B;IAClE,OAAO,GAAG,aAAa;;gBAET,QAAQ;;EAEtB,oBAAoB;;;;;;;8DAOwC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,20 @@
1
+ export interface ProviderConfig {
2
+ provider: string;
3
+ model: string;
4
+ baseUrl?: string;
5
+ autoDetected: boolean;
6
+ detectedAt: string;
7
+ }
8
+ export interface DetectOptions {
9
+ env?: Record<string, string | undefined>;
10
+ ollamaBaseUrl?: string;
11
+ projectRoot?: string;
12
+ }
13
+ export declare function detectProvider(options?: DetectOptions): Promise<ProviderConfig | null>;
14
+ export declare function detectOllama(baseUrl?: string): Promise<string[] | null>;
15
+ export declare function loadConfig(projectRoot: string): ProviderConfig | null;
16
+ export declare function saveConfig(projectRoot: string, config: ProviderConfig): void;
17
+ export declare function getDefaultModel(provider: string): string;
18
+ export declare function getAvailableProviders(env?: Record<string, string | undefined>): string[];
19
+ export declare function printDetectionResult(config: ProviderConfig | null, verbose?: boolean): void;
20
+ //# sourceMappingURL=providerDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerDetector.d.ts","sourceRoot":"","sources":["../../src/providerDetector.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAcD,wBAAsB,cAAc,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAyDhG;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,MAA2B,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAWjG;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAWrE;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAG5E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,EAAE,CAYxF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,EAAE,OAAO,GAAE,OAAe,GAAG,IAAI,CA8BlG"}