baseguard 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 (244) hide show
  1. package/.eslintrc.json +25 -0
  2. package/.prettierrc +8 -0
  3. package/README.md +94 -0
  4. package/bin/base.js +494 -0
  5. package/dist/ai/fix-manager.d.ts +67 -0
  6. package/dist/ai/fix-manager.d.ts.map +1 -0
  7. package/dist/ai/fix-manager.js +326 -0
  8. package/dist/ai/fix-manager.js.map +1 -0
  9. package/dist/ai/gemini-analyzer.d.ts +116 -0
  10. package/dist/ai/gemini-analyzer.d.ts.map +1 -0
  11. package/dist/ai/gemini-analyzer.js +572 -0
  12. package/dist/ai/gemini-analyzer.js.map +1 -0
  13. package/dist/ai/index.d.ts +4 -0
  14. package/dist/ai/index.d.ts.map +1 -0
  15. package/dist/ai/index.js +5 -0
  16. package/dist/ai/index.js.map +1 -0
  17. package/dist/ai/jules-implementer.d.ts +115 -0
  18. package/dist/ai/jules-implementer.d.ts.map +1 -0
  19. package/dist/ai/jules-implementer.js +387 -0
  20. package/dist/ai/jules-implementer.js.map +1 -0
  21. package/dist/commands/automation.d.ts +5 -0
  22. package/dist/commands/automation.d.ts.map +1 -0
  23. package/dist/commands/automation.js +305 -0
  24. package/dist/commands/automation.js.map +1 -0
  25. package/dist/commands/check.d.ts +9 -0
  26. package/dist/commands/check.d.ts.map +1 -0
  27. package/dist/commands/check.js +113 -0
  28. package/dist/commands/check.js.map +1 -0
  29. package/dist/commands/config.d.ts +11 -0
  30. package/dist/commands/config.d.ts.map +1 -0
  31. package/dist/commands/config.js +324 -0
  32. package/dist/commands/config.js.map +1 -0
  33. package/dist/commands/fix.d.ts +9 -0
  34. package/dist/commands/fix.d.ts.map +1 -0
  35. package/dist/commands/fix.js +207 -0
  36. package/dist/commands/fix.js.map +1 -0
  37. package/dist/commands/index.d.ts +6 -0
  38. package/dist/commands/index.d.ts.map +1 -0
  39. package/dist/commands/index.js +7 -0
  40. package/dist/commands/index.js.map +1 -0
  41. package/dist/commands/init.d.ts +9 -0
  42. package/dist/commands/init.d.ts.map +1 -0
  43. package/dist/commands/init.js +125 -0
  44. package/dist/commands/init.js.map +1 -0
  45. package/dist/core/api-key-manager.d.ts +83 -0
  46. package/dist/core/api-key-manager.d.ts.map +1 -0
  47. package/dist/core/api-key-manager.js +244 -0
  48. package/dist/core/api-key-manager.js.map +1 -0
  49. package/dist/core/baseguard.d.ts +46 -0
  50. package/dist/core/baseguard.d.ts.map +1 -0
  51. package/dist/core/baseguard.js +132 -0
  52. package/dist/core/baseguard.js.map +1 -0
  53. package/dist/core/baseline-checker.d.ts +63 -0
  54. package/dist/core/baseline-checker.d.ts.map +1 -0
  55. package/dist/core/baseline-checker.js +502 -0
  56. package/dist/core/baseline-checker.js.map +1 -0
  57. package/dist/core/cache-manager.d.ts +88 -0
  58. package/dist/core/cache-manager.d.ts.map +1 -0
  59. package/dist/core/cache-manager.js +213 -0
  60. package/dist/core/cache-manager.js.map +1 -0
  61. package/dist/core/configuration.d.ts +140 -0
  62. package/dist/core/configuration.d.ts.map +1 -0
  63. package/dist/core/configuration.js +474 -0
  64. package/dist/core/configuration.js.map +1 -0
  65. package/dist/core/directory-filter.d.ts +90 -0
  66. package/dist/core/directory-filter.d.ts.map +1 -0
  67. package/dist/core/directory-filter.js +319 -0
  68. package/dist/core/directory-filter.js.map +1 -0
  69. package/dist/core/error-handler.d.ts +110 -0
  70. package/dist/core/error-handler.d.ts.map +1 -0
  71. package/dist/core/error-handler.js +392 -0
  72. package/dist/core/error-handler.js.map +1 -0
  73. package/dist/core/file-processor.d.ts +80 -0
  74. package/dist/core/file-processor.d.ts.map +1 -0
  75. package/dist/core/file-processor.js +259 -0
  76. package/dist/core/file-processor.js.map +1 -0
  77. package/dist/core/gitignore-manager.d.ts +44 -0
  78. package/dist/core/gitignore-manager.d.ts.map +1 -0
  79. package/dist/core/gitignore-manager.js +147 -0
  80. package/dist/core/gitignore-manager.js.map +1 -0
  81. package/dist/core/index.d.ts +13 -0
  82. package/dist/core/index.d.ts.map +1 -0
  83. package/dist/core/index.js +13 -0
  84. package/dist/core/index.js.map +1 -0
  85. package/dist/core/lazy-loader.d.ts +68 -0
  86. package/dist/core/lazy-loader.d.ts.map +1 -0
  87. package/dist/core/lazy-loader.js +260 -0
  88. package/dist/core/lazy-loader.js.map +1 -0
  89. package/dist/core/memory-manager.d.ts +1 -0
  90. package/dist/core/memory-manager.d.ts.map +1 -0
  91. package/dist/core/memory-manager.js +2 -0
  92. package/dist/core/memory-manager.js.map +1 -0
  93. package/dist/core/startup-optimizer.d.ts +45 -0
  94. package/dist/core/startup-optimizer.d.ts.map +1 -0
  95. package/dist/core/startup-optimizer.js +140 -0
  96. package/dist/core/startup-optimizer.js.map +1 -0
  97. package/dist/git/automation-engine.d.ts +58 -0
  98. package/dist/git/automation-engine.d.ts.map +1 -0
  99. package/dist/git/automation-engine.js +318 -0
  100. package/dist/git/automation-engine.js.map +1 -0
  101. package/dist/git/github-manager.d.ts +71 -0
  102. package/dist/git/github-manager.d.ts.map +1 -0
  103. package/dist/git/github-manager.js +226 -0
  104. package/dist/git/github-manager.js.map +1 -0
  105. package/dist/git/hook-manager.d.ts +43 -0
  106. package/dist/git/hook-manager.d.ts.map +1 -0
  107. package/dist/git/hook-manager.js +191 -0
  108. package/dist/git/hook-manager.js.map +1 -0
  109. package/dist/git/index.d.ts +4 -0
  110. package/dist/git/index.d.ts.map +1 -0
  111. package/dist/git/index.js +5 -0
  112. package/dist/git/index.js.map +1 -0
  113. package/dist/index.d.ts +8 -0
  114. package/dist/index.d.ts.map +1 -0
  115. package/dist/index.js +9 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/parsers/feature-validator.d.ts +60 -0
  118. package/dist/parsers/feature-validator.d.ts.map +1 -0
  119. package/dist/parsers/feature-validator.js +483 -0
  120. package/dist/parsers/feature-validator.js.map +1 -0
  121. package/dist/parsers/index.d.ts +8 -0
  122. package/dist/parsers/index.d.ts.map +1 -0
  123. package/dist/parsers/index.js +9 -0
  124. package/dist/parsers/index.js.map +1 -0
  125. package/dist/parsers/parser-manager.d.ts +103 -0
  126. package/dist/parsers/parser-manager.d.ts.map +1 -0
  127. package/dist/parsers/parser-manager.js +321 -0
  128. package/dist/parsers/parser-manager.js.map +1 -0
  129. package/dist/parsers/parser.d.ts +23 -0
  130. package/dist/parsers/parser.d.ts.map +1 -0
  131. package/dist/parsers/parser.js +6 -0
  132. package/dist/parsers/parser.js.map +1 -0
  133. package/dist/parsers/react-parser.d.ts +22 -0
  134. package/dist/parsers/react-parser.d.ts.map +1 -0
  135. package/dist/parsers/react-parser.js +307 -0
  136. package/dist/parsers/react-parser.js.map +1 -0
  137. package/dist/parsers/svelte-parser.d.ts +33 -0
  138. package/dist/parsers/svelte-parser.d.ts.map +1 -0
  139. package/dist/parsers/svelte-parser.js +408 -0
  140. package/dist/parsers/svelte-parser.js.map +1 -0
  141. package/dist/parsers/vanilla-parser.d.ts +31 -0
  142. package/dist/parsers/vanilla-parser.d.ts.map +1 -0
  143. package/dist/parsers/vanilla-parser.js +590 -0
  144. package/dist/parsers/vanilla-parser.js.map +1 -0
  145. package/dist/parsers/vue-parser.d.ts +9 -0
  146. package/dist/parsers/vue-parser.d.ts.map +1 -0
  147. package/dist/parsers/vue-parser.js +16 -0
  148. package/dist/parsers/vue-parser.js.map +1 -0
  149. package/dist/terminal-header.d.ts +12 -0
  150. package/dist/terminal-header.js +45 -0
  151. package/dist/types/index.d.ts +83 -0
  152. package/dist/types/index.d.ts.map +1 -0
  153. package/dist/types/index.js +5 -0
  154. package/dist/types/index.js.map +1 -0
  155. package/dist/ui/components.d.ts +133 -0
  156. package/dist/ui/components.d.ts.map +1 -0
  157. package/dist/ui/components.js +482 -0
  158. package/dist/ui/components.js.map +1 -0
  159. package/dist/ui/help.d.ts +11 -0
  160. package/dist/ui/help.d.ts.map +1 -0
  161. package/dist/ui/help.js +161 -0
  162. package/dist/ui/help.js.map +1 -0
  163. package/dist/ui/index.d.ts +5 -0
  164. package/dist/ui/index.d.ts.map +1 -0
  165. package/dist/ui/index.js +5 -0
  166. package/dist/ui/index.js.map +1 -0
  167. package/dist/ui/prompts.d.ts +63 -0
  168. package/dist/ui/prompts.d.ts.map +1 -0
  169. package/dist/ui/prompts.js +611 -0
  170. package/dist/ui/prompts.js.map +1 -0
  171. package/dist/ui/terminal-header.d.ts +13 -0
  172. package/dist/ui/terminal-header.d.ts.map +1 -0
  173. package/dist/ui/terminal-header.js +46 -0
  174. package/dist/ui/terminal-header.js.map +1 -0
  175. package/package.json +80 -0
  176. package/src/ai/__tests__/gemini-analyzer.test.ts +181 -0
  177. package/src/ai/fix-manager.ts +362 -0
  178. package/src/ai/gemini-analyzer.ts +671 -0
  179. package/src/ai/index.ts +4 -0
  180. package/src/ai/jules-implementer.ts +459 -0
  181. package/src/commands/automation.ts +344 -0
  182. package/src/commands/check.ts +299 -0
  183. package/src/commands/config.ts +365 -0
  184. package/src/commands/fix.ts +234 -0
  185. package/src/commands/index.ts +6 -0
  186. package/src/commands/init.ts +142 -0
  187. package/src/commands/status.ts +0 -0
  188. package/src/core/api-key-manager.ts +298 -0
  189. package/src/core/baseguard.ts +742 -0
  190. package/src/core/baseline-checker.ts +563 -0
  191. package/src/core/cache-manager.ts +270 -0
  192. package/src/core/configuration-recovery.ts +676 -0
  193. package/src/core/configuration.ts +559 -0
  194. package/src/core/debug-logger.ts +590 -0
  195. package/src/core/directory-filter.ts +421 -0
  196. package/src/core/error-handler.ts +517 -0
  197. package/src/core/file-processor.ts +331 -0
  198. package/src/core/gitignore-manager.ts +169 -0
  199. package/src/core/graceful-degradation-manager.ts +596 -0
  200. package/src/core/index.ts +13 -0
  201. package/src/core/lazy-loader.ts +307 -0
  202. package/src/core/logger.ts +0 -0
  203. package/src/core/memory-manager.ts +294 -0
  204. package/src/core/startup-optimizer.ts +173 -0
  205. package/src/core/system-error-handler.ts +746 -0
  206. package/src/git/automation-engine.ts +361 -0
  207. package/src/git/github-manager.ts +260 -0
  208. package/src/git/hook-manager.ts +210 -0
  209. package/src/git/index.ts +4 -0
  210. package/src/index.ts +8 -0
  211. package/src/parsers/feature-validator.ts +559 -0
  212. package/src/parsers/index.ts +8 -0
  213. package/src/parsers/parser-manager.ts +419 -0
  214. package/src/parsers/parser.ts +26 -0
  215. package/src/parsers/react-parser-optimized.ts +161 -0
  216. package/src/parsers/react-parser.ts +359 -0
  217. package/src/parsers/svelte-parser.ts +506 -0
  218. package/src/parsers/vanilla-parser.ts +682 -0
  219. package/src/parsers/vue-parser.ts +472 -0
  220. package/src/types/index.ts +92 -0
  221. package/src/ui/components.ts +567 -0
  222. package/src/ui/help.ts +193 -0
  223. package/src/ui/index.ts +4 -0
  224. package/src/ui/prompts.ts +688 -0
  225. package/src/ui/terminal-header.ts +59 -0
  226. package/test-config-commands.js +56 -0
  227. package/test-header-simple.js +33 -0
  228. package/test-terminal-header.js +12 -0
  229. package/test-ui.js +29 -0
  230. package/tests/e2e/baseguard.e2e.test.ts +516 -0
  231. package/tests/e2e/cross-platform.e2e.test.ts +420 -0
  232. package/tests/e2e/git-integration.e2e.test.ts +487 -0
  233. package/tests/fixtures/react-project/package.json +14 -0
  234. package/tests/fixtures/react-project/src/App.css +76 -0
  235. package/tests/fixtures/react-project/src/App.tsx +77 -0
  236. package/tests/fixtures/svelte-project/package.json +11 -0
  237. package/tests/fixtures/svelte-project/src/App.svelte +369 -0
  238. package/tests/fixtures/vanilla-project/index.html +76 -0
  239. package/tests/fixtures/vanilla-project/script.js +331 -0
  240. package/tests/fixtures/vanilla-project/styles.css +359 -0
  241. package/tests/fixtures/vue-project/package.json +12 -0
  242. package/tests/fixtures/vue-project/src/App.vue +216 -0
  243. package/tsconfig.json +36 -0
  244. package/vitest.config.ts +10 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix-manager.d.ts","sourceRoot":"","sources":["../../src/ai/fix-manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,GAAG,EAAa,MAAM,mBAAmB,CAAC;AAExD;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,YAAY,CAAgE;IAEpF;;OAEG;IACG,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAWhD;;OAEG;IACG,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IA0DhD;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BvC;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,EAAE,GAAG,EAAE,CAAC;QAAC,MAAM,EAAE;YAAE,GAAG,EAAE,GAAG,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IA8BlH;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBlD;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAcvC;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;YACW,YAAY;IAa1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmC3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiDzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;YACW,gBAAgB;CAyB/B"}
@@ -0,0 +1,326 @@
1
+ import { readFile, writeFile, copyFile } from 'fs/promises';
2
+ import { existsSync } from 'fs';
3
+ import { join, dirname } from 'path';
4
+ import { mkdir } from 'fs/promises';
5
+ import chalk from 'chalk';
6
+ /**
7
+ * Fix manager for previewing and applying code fixes
8
+ */
9
+ export class FixManager {
10
+ appliedFixes = new Map();
11
+ /**
12
+ * Generate unified diff preview of proposed changes
13
+ */
14
+ async generatePreview(fix) {
15
+ try {
16
+ const originalContent = await readFile(fix.filePath, 'utf8');
17
+ const modifiedContent = this.applyPatchToContent(originalContent, fix.patch);
18
+ return this.createUnifiedDiff(fix.filePath, originalContent, modifiedContent);
19
+ }
20
+ catch (error) {
21
+ throw new Error(`Failed to generate preview: ${error instanceof Error ? error.message : 'Unknown error'}`);
22
+ }
23
+ }
24
+ /**
25
+ * Show interactive fix approval with clear change descriptions
26
+ */
27
+ async showFixPreview(fix) {
28
+ console.log(chalk.cyan(`\n🔧 Fix Preview for ${fix.violation.feature} in ${fix.filePath}\n`));
29
+ // Show fix explanation
30
+ console.log(chalk.white('📋 Fix Description:'));
31
+ console.log(chalk.dim(fix.explanation));
32
+ console.log();
33
+ // Show confidence score
34
+ const confidenceColor = fix.confidence >= 0.8 ? 'green' : fix.confidence >= 0.6 ? 'yellow' : 'red';
35
+ console.log(chalk.white('🎯 Confidence: ') + chalk[confidenceColor](`${Math.round(fix.confidence * 100)}%`));
36
+ console.log();
37
+ // Show unified diff
38
+ console.log(chalk.white('📝 Changes:'));
39
+ const preview = await this.generatePreview(fix);
40
+ console.log(this.colorizeUnifiedDiff(preview));
41
+ console.log();
42
+ // Show human-readable preview
43
+ if (fix.preview) {
44
+ console.log(chalk.white('👀 Summary:'));
45
+ console.log(chalk.dim(fix.preview));
46
+ console.log();
47
+ }
48
+ // Interactive approval
49
+ const { default: inquirer } = await import('inquirer');
50
+ const { action } = await inquirer.prompt([
51
+ {
52
+ type: 'list',
53
+ name: 'action',
54
+ message: 'What would you like to do with this fix?',
55
+ choices: [
56
+ { name: '✅ Apply this fix', value: 'apply' },
57
+ { name: '👀 Show detailed diff', value: 'detail' },
58
+ { name: '❌ Skip this fix', value: 'skip' },
59
+ { name: '🚫 Cancel all fixes', value: 'cancel' }
60
+ ]
61
+ }
62
+ ]);
63
+ switch (action) {
64
+ case 'apply':
65
+ return true;
66
+ case 'detail':
67
+ await this.showDetailedDiff(fix);
68
+ return await this.showFixPreview(fix); // Show preview again
69
+ case 'skip':
70
+ return false;
71
+ case 'cancel':
72
+ throw new Error('Fix application cancelled by user');
73
+ default:
74
+ return false;
75
+ }
76
+ }
77
+ /**
78
+ * Apply fixes to original files while preserving formatting and structure
79
+ */
80
+ async applyFix(fix) {
81
+ try {
82
+ // Create backup before applying fix
83
+ await this.createBackup(fix.filePath);
84
+ // Read original content
85
+ const originalContent = await readFile(fix.filePath, 'utf8');
86
+ // Apply patch to content
87
+ const modifiedContent = this.applyPatchToContent(originalContent, fix.patch);
88
+ // Write modified content back to file
89
+ await writeFile(fix.filePath, modifiedContent, 'utf8');
90
+ // Store fix information for potential rollback
91
+ this.appliedFixes.set(fix.filePath, {
92
+ original: originalContent,
93
+ backup: this.getBackupPath(fix.filePath)
94
+ });
95
+ console.log(chalk.green(`✅ Applied fix to ${fix.filePath}`));
96
+ }
97
+ catch (error) {
98
+ throw new Error(`Failed to apply fix: ${error instanceof Error ? error.message : 'Unknown error'}`);
99
+ }
100
+ }
101
+ /**
102
+ * Apply multiple fixes with batch processing
103
+ */
104
+ async applyFixes(fixes) {
105
+ const results = {
106
+ applied: [],
107
+ skipped: [],
108
+ failed: []
109
+ };
110
+ console.log(chalk.cyan(`\n🔧 Applying ${fixes.length} fixes...\n`));
111
+ for (const fix of fixes) {
112
+ try {
113
+ const shouldApply = await this.showFixPreview(fix);
114
+ if (shouldApply) {
115
+ await this.applyFix(fix);
116
+ results.applied.push(fix);
117
+ }
118
+ else {
119
+ results.skipped.push(fix);
120
+ console.log(chalk.yellow(`⏭️ Skipped fix for ${fix.filePath}`));
121
+ }
122
+ }
123
+ catch (error) {
124
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
125
+ results.failed.push({ fix, error: errorMessage });
126
+ console.log(chalk.red(`❌ Failed to apply fix for ${fix.filePath}: ${errorMessage}`));
127
+ }
128
+ }
129
+ return results;
130
+ }
131
+ /**
132
+ * Rollback applied fixes
133
+ */
134
+ async rollbackFix(filePath) {
135
+ const fixInfo = this.appliedFixes.get(filePath);
136
+ if (!fixInfo) {
137
+ throw new Error(`No applied fix found for ${filePath}`);
138
+ }
139
+ try {
140
+ // Restore original content
141
+ await writeFile(filePath, fixInfo.original, 'utf8');
142
+ // Remove from applied fixes
143
+ this.appliedFixes.delete(filePath);
144
+ console.log(chalk.green(`✅ Rolled back fix for ${filePath}`));
145
+ }
146
+ catch (error) {
147
+ throw new Error(`Failed to rollback fix: ${error instanceof Error ? error.message : 'Unknown error'}`);
148
+ }
149
+ }
150
+ /**
151
+ * Rollback all applied fixes
152
+ */
153
+ async rollbackAllFixes() {
154
+ const filePaths = Array.from(this.appliedFixes.keys());
155
+ console.log(chalk.cyan(`\n🔄 Rolling back ${filePaths.length} fixes...\n`));
156
+ for (const filePath of filePaths) {
157
+ try {
158
+ await this.rollbackFix(filePath);
159
+ }
160
+ catch (error) {
161
+ console.log(chalk.red(`❌ Failed to rollback ${filePath}: ${error instanceof Error ? error.message : 'Unknown error'}`));
162
+ }
163
+ }
164
+ }
165
+ /**
166
+ * Get list of applied fixes
167
+ */
168
+ getAppliedFixes() {
169
+ return Array.from(this.appliedFixes.keys());
170
+ }
171
+ /**
172
+ * Create backup of original file
173
+ */
174
+ async createBackup(filePath) {
175
+ const backupPath = this.getBackupPath(filePath);
176
+ const backupDir = dirname(backupPath);
177
+ // Ensure backup directory exists
178
+ if (!existsSync(backupDir)) {
179
+ await mkdir(backupDir, { recursive: true });
180
+ }
181
+ // Copy original file to backup location
182
+ await copyFile(filePath, backupPath);
183
+ }
184
+ /**
185
+ * Get backup file path
186
+ */
187
+ getBackupPath(filePath) {
188
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
189
+ return join('.baseguard', 'backups', `${filePath.replace(/[/\\]/g, '_')}.${timestamp}.backup`);
190
+ }
191
+ /**
192
+ * Apply patch to file content
193
+ */
194
+ applyPatchToContent(originalContent, patch) {
195
+ const lines = originalContent.split('\n');
196
+ const patchLines = patch.split('\n');
197
+ let result = [...lines];
198
+ let currentLine = 0;
199
+ for (const patchLine of patchLines) {
200
+ if (patchLine.startsWith('@@')) {
201
+ // Parse hunk header to get line numbers
202
+ const match = patchLine.match(/@@ -(\d+),?\d* \+(\d+),?\d* @@/);
203
+ if (match && match[2]) {
204
+ currentLine = parseInt(match[2]) - 1;
205
+ }
206
+ }
207
+ else if (patchLine.startsWith('-')) {
208
+ // Remove line
209
+ const lineToRemove = patchLine.substring(1);
210
+ const index = result.findIndex((line, i) => i >= currentLine && line.trim() === lineToRemove.trim());
211
+ if (index !== -1) {
212
+ result.splice(index, 1);
213
+ }
214
+ }
215
+ else if (patchLine.startsWith('+')) {
216
+ // Add line
217
+ const lineToAdd = patchLine.substring(1);
218
+ result.splice(currentLine, 0, lineToAdd);
219
+ currentLine++;
220
+ }
221
+ else if (patchLine.startsWith(' ')) {
222
+ // Context line - advance current line
223
+ currentLine++;
224
+ }
225
+ }
226
+ return result.join('\n');
227
+ }
228
+ /**
229
+ * Create unified diff between original and modified content
230
+ */
231
+ createUnifiedDiff(filePath, original, modified) {
232
+ const originalLines = original.split('\n');
233
+ const modifiedLines = modified.split('\n');
234
+ let diff = `--- a/${filePath}\n+++ b/${filePath}\n`;
235
+ // Simple diff algorithm (in production, use a proper diff library)
236
+ let i = 0, j = 0;
237
+ while (i < originalLines.length || j < modifiedLines.length) {
238
+ const originalLine = originalLines[i] || '';
239
+ const modifiedLine = modifiedLines[j] || '';
240
+ if (originalLine === modifiedLine) {
241
+ diff += ` ${originalLine}\n`;
242
+ i++;
243
+ j++;
244
+ }
245
+ else {
246
+ // Find next matching line
247
+ let nextMatch = -1;
248
+ for (let k = j + 1; k < modifiedLines.length; k++) {
249
+ if (modifiedLines[k] === originalLine) {
250
+ nextMatch = k;
251
+ break;
252
+ }
253
+ }
254
+ if (nextMatch !== -1) {
255
+ // Lines were added
256
+ for (let k = j; k < nextMatch; k++) {
257
+ diff += `+${modifiedLines[k]}\n`;
258
+ }
259
+ j = nextMatch;
260
+ }
261
+ else {
262
+ // Line was removed or changed
263
+ if (i < originalLines.length) {
264
+ diff += `-${originalLine}\n`;
265
+ i++;
266
+ }
267
+ if (j < modifiedLines.length) {
268
+ diff += `+${modifiedLine}\n`;
269
+ j++;
270
+ }
271
+ }
272
+ }
273
+ }
274
+ return diff;
275
+ }
276
+ /**
277
+ * Colorize unified diff for better readability
278
+ */
279
+ colorizeUnifiedDiff(diff) {
280
+ return diff
281
+ .split('\n')
282
+ .map(line => {
283
+ if (line.startsWith('+++') || line.startsWith('---')) {
284
+ return chalk.bold(line);
285
+ }
286
+ else if (line.startsWith('@@')) {
287
+ return chalk.cyan(line);
288
+ }
289
+ else if (line.startsWith('+')) {
290
+ return chalk.green(line);
291
+ }
292
+ else if (line.startsWith('-')) {
293
+ return chalk.red(line);
294
+ }
295
+ else {
296
+ return chalk.dim(line);
297
+ }
298
+ })
299
+ .join('\n');
300
+ }
301
+ /**
302
+ * Show detailed diff with more context
303
+ */
304
+ async showDetailedDiff(fix) {
305
+ console.log(chalk.cyan(`\n📋 Detailed Diff for ${fix.filePath}\n`));
306
+ try {
307
+ const originalContent = await readFile(fix.filePath, 'utf8');
308
+ const modifiedContent = this.applyPatchToContent(originalContent, fix.patch);
309
+ const originalLines = originalContent.split('\n');
310
+ const modifiedLines = modifiedContent.split('\n');
311
+ console.log(chalk.white('Original:'));
312
+ originalLines.forEach((line, i) => {
313
+ console.log(chalk.dim(`${(i + 1).toString().padStart(3)} | `) + line);
314
+ });
315
+ console.log(chalk.white('\nModified:'));
316
+ modifiedLines.forEach((line, i) => {
317
+ console.log(chalk.dim(`${(i + 1).toString().padStart(3)} | `) + line);
318
+ });
319
+ console.log();
320
+ }
321
+ catch (error) {
322
+ console.log(chalk.red(`Failed to show detailed diff: ${error instanceof Error ? error.message : 'Unknown error'}`));
323
+ }
324
+ }
325
+ }
326
+ //# sourceMappingURL=fix-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix-manager.js","sourceRoot":"","sources":["../../src/ai/fix-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import type { Violation, Analysis } from '../types/index.js';
2
+ import { ErrorType } from '../core/error-handler.js';
3
+ /**
4
+ * Gemini AI analyzer for compatibility violations
5
+ */
6
+ export declare class GeminiAnalyzer {
7
+ private apiKey;
8
+ private baseUrl;
9
+ private cache;
10
+ private readonly cacheTtl;
11
+ constructor(apiKey: string);
12
+ /**
13
+ * Analyze a violation using Gemini AI with web search
14
+ */
15
+ analyzeViolation(violation: Violation): Promise<Analysis>;
16
+ /**
17
+ * Make API call to Gemini (retry logic handled by ErrorHandler)
18
+ */
19
+ private makeApiCall;
20
+ /**
21
+ * Build analysis prompt for Gemini
22
+ */
23
+ private buildAnalysisPrompt;
24
+ /**
25
+ * Parse Gemini response into structured analysis
26
+ */
27
+ private parseAnalysisResponse;
28
+ /**
29
+ * Extract sources from grounding metadata
30
+ */
31
+ private extractSources;
32
+ /**
33
+ * Extract user impact from response text
34
+ */
35
+ private extractUserImpact;
36
+ /**
37
+ * Extract market share percentage from response
38
+ */
39
+ private extractMarketShare;
40
+ /**
41
+ * Get current violation being processed (for fallback messages)
42
+ */
43
+ private getCurrentViolation;
44
+ /**
45
+ * Extract fix strategy from response
46
+ */
47
+ private extractFixStrategy;
48
+ /**
49
+ * Extract best practices from response
50
+ */
51
+ private extractBestPractices;
52
+ /**
53
+ * Clean up plain English explanation
54
+ */
55
+ private cleanupPlainEnglish;
56
+ /**
57
+ * Calculate confidence score based on grounding quality
58
+ */
59
+ private calculateConfidence;
60
+ /**
61
+ * Create fallback analysis when API fails
62
+ */
63
+ private createFallbackAnalysis;
64
+ /**
65
+ * Estimate market share for fallback analysis
66
+ */
67
+ private estimateMarketShare;
68
+ /**
69
+ * Get default fix strategy based on feature type
70
+ */
71
+ private getDefaultFixStrategy;
72
+ /**
73
+ * Generate cache key for a violation
74
+ */
75
+ private generateCacheKey;
76
+ /**
77
+ * Get cached analysis if available and not expired
78
+ */
79
+ private getCachedAnalysis;
80
+ /**
81
+ * Cache analysis result
82
+ */
83
+ private cacheAnalysis;
84
+ /**
85
+ * Clean up expired cache entries
86
+ */
87
+ private cleanupCache;
88
+ /**
89
+ * Clear all cached analyses
90
+ */
91
+ clearCache(): void;
92
+ /**
93
+ * Get cache statistics
94
+ */
95
+ getCacheStats(): {
96
+ size: number;
97
+ hitRate?: number;
98
+ };
99
+ /**
100
+ * Analyze multiple violations with concurrency control
101
+ */
102
+ analyzeViolations(violations: Violation[], maxConcurrent?: number): Promise<Analysis[]>;
103
+ /**
104
+ * Validate API key format
105
+ */
106
+ static validateApiKey(apiKey: string): boolean;
107
+ /**
108
+ * Test API connectivity
109
+ */
110
+ testConnection(): Promise<{
111
+ success: boolean;
112
+ error?: string;
113
+ errorType?: ErrorType;
114
+ }>;
115
+ }
116
+ //# sourceMappingURL=gemini-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-analyzer.d.ts","sourceRoot":"","sources":["../../src/ai/gemini-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAA0B,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAW7E;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAkG;IACjH,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;gBAEpC,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACG,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;IAuF/D;;OAEG;YACW,WAAW;IAsCzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+B3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4B7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiCzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoC5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoC9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiC3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACI,UAAU,IAAI,IAAI;IAIzB;;OAEG;IACI,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAM1D;;OAEG;IACG,iBAAiB,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,aAAa,SAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAmCxF;;OAEG;WACW,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAMrD;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;CA4B7F"}