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,572 @@
1
+ import { createHash } from 'crypto';
2
+ import { ErrorHandler, APIError, ErrorType } from '../core/error-handler.js';
3
+ /**
4
+ * Gemini AI analyzer for compatibility violations
5
+ */
6
+ export class GeminiAnalyzer {
7
+ apiKey;
8
+ baseUrl = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp:generateContent';
9
+ cache = new Map();
10
+ cacheTtl = 24 * 60 * 60 * 1000; // 24 hours
11
+ constructor(apiKey) {
12
+ this.apiKey = apiKey;
13
+ }
14
+ /**
15
+ * Analyze a violation using Gemini AI with web search
16
+ */
17
+ async analyzeViolation(violation) {
18
+ // Check cache first
19
+ const cacheKey = this.generateCacheKey(violation);
20
+ const cachedResult = this.getCachedAnalysis(cacheKey);
21
+ if (cachedResult) {
22
+ console.log(`Using cached analysis for ${violation.feature}`);
23
+ return cachedResult;
24
+ }
25
+ const context = ErrorHandler.createContext('gemini_analysis', {
26
+ feature: violation.feature,
27
+ browser: violation.browser,
28
+ file: violation.file
29
+ });
30
+ try {
31
+ const prompt = this.buildAnalysisPrompt(violation);
32
+ const response = await ErrorHandler.withRetry(() => this.makeApiCall(prompt), {
33
+ maxRetries: 2,
34
+ retryableErrors: [ErrorType.NETWORK, ErrorType.TIMEOUT, ErrorType.RATE_LIMIT, ErrorType.SERVER_ERROR]
35
+ });
36
+ const data = await response.json();
37
+ // Validate response structure
38
+ ErrorHandler.validateAPIResponse(data, ['candidates']);
39
+ if (!data.candidates || data.candidates.length === 0) {
40
+ throw new APIError('No analysis candidates returned from Gemini API', ErrorType.VALIDATION, {
41
+ suggestions: [
42
+ 'Try rephrasing the analysis request',
43
+ 'Check if the feature is supported by Gemini',
44
+ 'Try again with a different violation'
45
+ ],
46
+ context
47
+ });
48
+ }
49
+ const candidate = data.candidates[0];
50
+ const content = candidate.content?.parts?.[0]?.text;
51
+ const groundingMetadata = candidate.groundingMetadata;
52
+ if (!content) {
53
+ throw new APIError('Empty analysis content returned from Gemini API', ErrorType.VALIDATION, {
54
+ suggestions: [
55
+ 'Try the analysis again',
56
+ 'Check if the violation data is complete',
57
+ 'Verify API key permissions'
58
+ ],
59
+ context
60
+ });
61
+ }
62
+ const analysis = this.parseAnalysisResponse(content, groundingMetadata, violation);
63
+ // Cache the result
64
+ this.cacheAnalysis(cacheKey, analysis);
65
+ return analysis;
66
+ }
67
+ catch (error) {
68
+ const apiError = ErrorHandler.handleAPIError(error, context);
69
+ // Log error for debugging
70
+ console.error('Gemini analysis failed:', {
71
+ feature: violation.feature,
72
+ error: apiError.message,
73
+ type: apiError.type
74
+ });
75
+ // Return fallback analysis with error context
76
+ return this.createFallbackAnalysis(violation, apiError);
77
+ }
78
+ }
79
+ /**
80
+ * Make API call to Gemini (retry logic handled by ErrorHandler)
81
+ */
82
+ async makeApiCall(prompt) {
83
+ const response = await fetch(this.baseUrl, {
84
+ method: 'POST',
85
+ headers: {
86
+ 'x-goog-api-key': this.apiKey,
87
+ 'Content-Type': 'application/json'
88
+ },
89
+ body: JSON.stringify({
90
+ contents: [{
91
+ parts: [{ text: prompt }]
92
+ }],
93
+ tools: [{
94
+ googleSearchRetrieval: {
95
+ dynamicRetrievalConfig: {
96
+ mode: 'MODE_DYNAMIC',
97
+ dynamicThreshold: 0.7
98
+ }
99
+ }
100
+ }],
101
+ generationConfig: {
102
+ temperature: 0.1,
103
+ topK: 40,
104
+ topP: 0.95,
105
+ maxOutputTokens: 2048
106
+ }
107
+ })
108
+ });
109
+ // Let ErrorHandler classify the error based on status code
110
+ if (!response.ok) {
111
+ const error = new Error(`HTTP ${response.status}: ${response.statusText}`);
112
+ error.response = response;
113
+ throw error;
114
+ }
115
+ return response;
116
+ }
117
+ /**
118
+ * Build analysis prompt for Gemini
119
+ */
120
+ buildAnalysisPrompt(violation) {
121
+ return `
122
+ Analyze this browser compatibility issue and provide actionable insights:
123
+
124
+ COMPATIBILITY ISSUE:
125
+ - Feature: ${violation.feature}
126
+ - File: ${violation.file} (line ${violation.line})
127
+ - Unsupported Browser: ${violation.browser} ${violation.required}
128
+ - Baseline Status: ${violation.baselineStatus}
129
+ - Code Context: ${violation.context}
130
+
131
+ Please research and provide:
132
+
133
+ 1. MARKET IMPACT: What percentage of users are affected by this compatibility issue? Search for current browser market share data for ${violation.browser} ${violation.required}.
134
+
135
+ 2. USER EXPERIENCE: Explain in plain English what will happen to users on the unsupported browser. Will the feature fail silently, break the layout, or cause JavaScript errors?
136
+
137
+ 3. FIX STRATEGY: What's the best approach to fix this? Options include:
138
+ - Progressive enhancement with @supports
139
+ - Feature detection with JavaScript
140
+ - Polyfills or libraries
141
+ - Alternative implementations
142
+
143
+ 4. BEST PRACTICES: Search for current best practices from MDN, web.dev, or CSS-Tricks for implementing ${violation.feature} with fallbacks.
144
+
145
+ 5. CODE EXAMPLES: What specific techniques should be used for the fix?
146
+
147
+ Format your response with clear sections and cite your sources.
148
+ `;
149
+ }
150
+ /**
151
+ * Parse Gemini response into structured analysis
152
+ */
153
+ parseAnalysisResponse(content, groundingMetadata, violation) {
154
+ // Extract sources from grounding metadata
155
+ const sources = this.extractSources(groundingMetadata);
156
+ // Parse structured information from response
157
+ const userImpact = this.extractUserImpact(content);
158
+ const marketShare = this.extractMarketShare(content);
159
+ const fixStrategy = this.extractFixStrategy(content);
160
+ const bestPractices = this.extractBestPractices(content);
161
+ // Calculate confidence based on grounding quality
162
+ const confidence = this.calculateConfidence(groundingMetadata, content);
163
+ // Clean up the plain English explanation
164
+ const plainEnglish = this.cleanupPlainEnglish(content);
165
+ return {
166
+ violation,
167
+ userImpact,
168
+ marketShare,
169
+ fixStrategy,
170
+ bestPractices,
171
+ sources,
172
+ plainEnglish,
173
+ confidence
174
+ };
175
+ }
176
+ /**
177
+ * Extract sources from grounding metadata
178
+ */
179
+ extractSources(groundingMetadata) {
180
+ if (!groundingMetadata?.groundingChunks) {
181
+ return [];
182
+ }
183
+ return groundingMetadata.groundingChunks
184
+ .map((chunk) => chunk.web?.uri)
185
+ .filter((uri) => uri && uri.startsWith('http'))
186
+ .slice(0, 5); // Limit to top 5 sources
187
+ }
188
+ /**
189
+ * Extract user impact from response text
190
+ */
191
+ extractUserImpact(content) {
192
+ // Look for specific impact patterns with context
193
+ const patterns = [
194
+ /(\d+(?:\.\d+)?%[^.]*(?:users?|browsers?|market|traffic|visitors?))/i,
195
+ /(?:affects?|impacts?)[^.]*(\d+(?:\.\d+)?%[^.]*)/i,
196
+ /(?:approximately|around|about)\s+(\d+(?:\.\d+)?%[^.]*(?:users?|browsers?))/i,
197
+ /(users?\s+on\s+[^.]*(?:may|will|could)[^.]*)/i
198
+ ];
199
+ for (const pattern of patterns) {
200
+ const match = content.match(pattern);
201
+ if (match && match[1]) {
202
+ return match[1].trim();
203
+ }
204
+ }
205
+ // Look for general impact statements without percentages
206
+ const generalPatterns = [
207
+ /(?:affects?|impacts?)[^.]*users?[^.]*\./i,
208
+ /users?\s+(?:may|will|could)[^.]*experience[^.]*\./i,
209
+ /compatibility\s+issues?[^.]*users?[^.]*\./i
210
+ ];
211
+ for (const pattern of generalPatterns) {
212
+ const match = content.match(pattern);
213
+ if (match && match[0]) {
214
+ return match[0].trim();
215
+ }
216
+ }
217
+ return `Users on ${this.getCurrentViolation()?.browser || 'older browsers'} may experience compatibility issues`;
218
+ }
219
+ /**
220
+ * Extract market share percentage from response
221
+ */
222
+ extractMarketShare(content) {
223
+ // Look for percentage patterns in context of market share or usage
224
+ const patterns = [
225
+ /market\s+share[^.]*?(\d+(?:\.\d+)?)%/i,
226
+ /(\d+(?:\.\d+)?)%[^.]*(?:market|users?|browsers?|traffic)/i,
227
+ /usage[^.]*?(\d+(?:\.\d+)?)%/i,
228
+ /(\d+(?:\.\d+)?)%[^.]*(?:affected|impacted)/i
229
+ ];
230
+ for (const pattern of patterns) {
231
+ const match = content.match(pattern);
232
+ if (match && match[1]) {
233
+ const percentage = parseFloat(match[1]);
234
+ if (percentage >= 0 && percentage <= 100) {
235
+ return percentage / 100;
236
+ }
237
+ }
238
+ }
239
+ // Fallback: look for any percentage and validate it's reasonable
240
+ const anyPercentMatch = content.match(/(\d+(?:\.\d+)?)%/);
241
+ if (anyPercentMatch && anyPercentMatch[1]) {
242
+ const percentage = parseFloat(anyPercentMatch[1]);
243
+ if (percentage >= 0.1 && percentage <= 50) { // Reasonable range for browser market share
244
+ return percentage / 100;
245
+ }
246
+ }
247
+ return 0.05; // Default 5% if not found
248
+ }
249
+ /**
250
+ * Get current violation being processed (for fallback messages)
251
+ */
252
+ getCurrentViolation() {
253
+ // This would be set during processing, but for now return null
254
+ return null;
255
+ }
256
+ /**
257
+ * Extract fix strategy from response
258
+ */
259
+ extractFixStrategy(content) {
260
+ // Look for strategy keywords
261
+ const strategies = [
262
+ 'progressive enhancement',
263
+ 'feature detection',
264
+ 'polyfill',
265
+ 'fallback',
266
+ '@supports',
267
+ 'graceful degradation'
268
+ ];
269
+ for (const strategy of strategies) {
270
+ if (content.toLowerCase().includes(strategy)) {
271
+ return strategy;
272
+ }
273
+ }
274
+ return 'progressive enhancement';
275
+ }
276
+ /**
277
+ * Extract best practices from response
278
+ */
279
+ extractBestPractices(content) {
280
+ const practices = [];
281
+ const lowerContent = content.toLowerCase();
282
+ // Look for specific best practices mentioned in the response
283
+ const practicePatterns = [
284
+ { pattern: /@supports|feature detection/i, practice: 'Use @supports for feature detection' },
285
+ { pattern: /fallback|alternative/i, practice: 'Provide fallback implementations' },
286
+ { pattern: /polyfill/i, practice: 'Consider using polyfills' },
287
+ { pattern: /progressive enhancement/i, practice: 'Use progressive enhancement' },
288
+ { pattern: /graceful degradation/i, practice: 'Implement graceful degradation' },
289
+ { pattern: /test|testing/i, practice: 'Test across target browsers' },
290
+ { pattern: /vendor prefix/i, practice: 'Use vendor prefixes when needed' },
291
+ { pattern: /modernizr/i, practice: 'Consider using Modernizr for feature detection' }
292
+ ];
293
+ for (const { pattern, practice } of practicePatterns) {
294
+ if (pattern.test(content) && !practices.includes(practice)) {
295
+ practices.push(practice);
296
+ }
297
+ }
298
+ // Extract numbered or bulleted best practices from the response
299
+ const listMatches = content.match(/(?:^|\n)\s*[-*•]\s*([^.\n]+)/gm);
300
+ if (listMatches) {
301
+ for (const match of listMatches.slice(0, 3)) { // Limit to 3 additional practices
302
+ const practice = match.replace(/^[\s\n-*•]+/, '').trim();
303
+ if (practice.length > 10 && practice.length < 100 && !practices.some(p => p.includes(practice))) {
304
+ practices.push(practice);
305
+ }
306
+ }
307
+ }
308
+ return practices.length > 0 ? practices : ['Follow progressive enhancement principles'];
309
+ }
310
+ /**
311
+ * Clean up plain English explanation
312
+ */
313
+ cleanupPlainEnglish(content) {
314
+ // Remove excessive whitespace and normalize line breaks
315
+ let cleaned = content.replace(/\n\s*\n/g, '\n\n').trim();
316
+ // Remove markdown formatting that might interfere with display
317
+ cleaned = cleaned.replace(/\*\*(.*?)\*\*/g, '$1'); // Remove bold
318
+ cleaned = cleaned.replace(/\*(.*?)\*/g, '$1'); // Remove italic
319
+ // Ensure it's not too long for display
320
+ if (cleaned.length > 1500) {
321
+ const sentences = cleaned.split(/[.!?]+/);
322
+ let truncated = '';
323
+ for (const sentence of sentences) {
324
+ if (truncated.length + sentence.length > 1400)
325
+ break;
326
+ truncated += sentence + '.';
327
+ }
328
+ cleaned = truncated + '..';
329
+ }
330
+ return cleaned;
331
+ }
332
+ /**
333
+ * Calculate confidence score based on grounding quality
334
+ */
335
+ calculateConfidence(groundingMetadata, content) {
336
+ let confidence = 0.5; // Base confidence
337
+ // Increase confidence if we have grounding sources
338
+ if (groundingMetadata?.groundingChunks?.length > 0) {
339
+ confidence += 0.2;
340
+ }
341
+ // Increase confidence if response contains specific data
342
+ if (content.includes('%')) {
343
+ confidence += 0.1;
344
+ }
345
+ // Increase confidence if response mentions authoritative sources
346
+ const authoritativeSources = ['mdn', 'web.dev', 'caniuse', 'w3c'];
347
+ if (authoritativeSources.some(source => content.toLowerCase().includes(source))) {
348
+ confidence += 0.2;
349
+ }
350
+ return Math.min(confidence, 1.0);
351
+ }
352
+ /**
353
+ * Create fallback analysis when API fails
354
+ */
355
+ createFallbackAnalysis(violation, error) {
356
+ let fallbackMessage = `Analysis unavailable: ${error.message}`;
357
+ let confidence = 0.3;
358
+ // Provide more specific fallback based on error type
359
+ if (error.type === ErrorType.RATE_LIMIT) {
360
+ fallbackMessage = `Rate limit reached. Using basic compatibility analysis for ${violation.feature}.`;
361
+ confidence = 0.4;
362
+ }
363
+ else if (error.type === ErrorType.AUTHENTICATION) {
364
+ fallbackMessage = `API authentication failed. Using offline compatibility analysis for ${violation.feature}.`;
365
+ confidence = 0.2;
366
+ }
367
+ else if (error.type === ErrorType.NETWORK) {
368
+ fallbackMessage = `Network unavailable. Using cached compatibility data for ${violation.feature}.`;
369
+ confidence = 0.5;
370
+ }
371
+ // Get fallback suggestions based on error type
372
+ const fallbackSuggestions = ErrorHandler.getFallbackSuggestions(error.type);
373
+ return {
374
+ violation,
375
+ userImpact: `Users on ${violation.browser} ${violation.required} may experience compatibility issues with ${violation.feature}`,
376
+ marketShare: this.estimateMarketShare(violation.browser, violation.required),
377
+ fixStrategy: this.getDefaultFixStrategy(violation.feature),
378
+ bestPractices: [
379
+ 'Use @supports for CSS feature detection',
380
+ 'Implement fallback solutions',
381
+ 'Test across target browsers',
382
+ ...fallbackSuggestions.slice(0, 2)
383
+ ],
384
+ sources: [],
385
+ plainEnglish: `${fallbackMessage} Consider using progressive enhancement techniques and testing across your target browsers.`,
386
+ confidence
387
+ };
388
+ }
389
+ /**
390
+ * Estimate market share for fallback analysis
391
+ */
392
+ estimateMarketShare(browser, version) {
393
+ // Conservative estimates based on typical browser usage patterns
394
+ const estimates = {
395
+ 'chrome': 0.65,
396
+ 'firefox': 0.08,
397
+ 'safari': 0.18,
398
+ 'edge': 0.05,
399
+ 'opera': 0.02,
400
+ 'samsung': 0.02
401
+ };
402
+ const baseShare = estimates[browser.toLowerCase()] || 0.05;
403
+ // Reduce estimate for older versions
404
+ if (version !== 'baseline' && version !== 'baseline-newly') {
405
+ const versionNum = parseInt(version, 10);
406
+ if (!isNaN(versionNum)) {
407
+ // Rough estimate: older versions have lower usage
408
+ const currentYear = new Date().getFullYear();
409
+ const estimatedYear = 2008 + (versionNum / 10); // Very rough estimation
410
+ const yearsDiff = currentYear - estimatedYear;
411
+ if (yearsDiff > 2) {
412
+ return baseShare * 0.1; // Much lower for old versions
413
+ }
414
+ else if (yearsDiff > 1) {
415
+ return baseShare * 0.3; // Lower for somewhat old versions
416
+ }
417
+ }
418
+ }
419
+ return baseShare;
420
+ }
421
+ /**
422
+ * Get default fix strategy based on feature type
423
+ */
424
+ getDefaultFixStrategy(feature) {
425
+ const lowerFeature = feature.toLowerCase();
426
+ if (lowerFeature.includes('css') || lowerFeature.includes('grid') || lowerFeature.includes('flex')) {
427
+ return 'progressive enhancement with @supports';
428
+ }
429
+ else if (lowerFeature.includes('api') || lowerFeature.includes('js')) {
430
+ return 'feature detection with polyfills';
431
+ }
432
+ else if (lowerFeature.includes('element') || lowerFeature.includes('html')) {
433
+ return 'graceful degradation';
434
+ }
435
+ return 'progressive enhancement';
436
+ }
437
+ /**
438
+ * Generate cache key for a violation
439
+ */
440
+ generateCacheKey(violation) {
441
+ // Create a hash based on feature, browser, and version
442
+ const keyData = `${violation.feature}:${violation.browser}:${violation.required}:${violation.baselineStatus}`;
443
+ return createHash('md5').update(keyData).digest('hex');
444
+ }
445
+ /**
446
+ * Get cached analysis if available and not expired
447
+ */
448
+ getCachedAnalysis(cacheKey) {
449
+ const entry = this.cache.get(cacheKey);
450
+ if (!entry) {
451
+ return null;
452
+ }
453
+ const now = Date.now();
454
+ if (now - entry.timestamp > entry.ttl) {
455
+ // Cache expired, remove it
456
+ this.cache.delete(cacheKey);
457
+ return null;
458
+ }
459
+ return entry.analysis;
460
+ }
461
+ /**
462
+ * Cache analysis result
463
+ */
464
+ cacheAnalysis(cacheKey, analysis) {
465
+ const entry = {
466
+ analysis,
467
+ timestamp: Date.now(),
468
+ ttl: this.cacheTtl
469
+ };
470
+ this.cache.set(cacheKey, entry);
471
+ // Clean up old entries periodically
472
+ this.cleanupCache();
473
+ }
474
+ /**
475
+ * Clean up expired cache entries
476
+ */
477
+ cleanupCache() {
478
+ const now = Date.now();
479
+ for (const [key, entry] of this.cache.entries()) {
480
+ if (now - entry.timestamp > entry.ttl) {
481
+ this.cache.delete(key);
482
+ }
483
+ }
484
+ }
485
+ /**
486
+ * Clear all cached analyses
487
+ */
488
+ clearCache() {
489
+ this.cache.clear();
490
+ }
491
+ /**
492
+ * Get cache statistics
493
+ */
494
+ getCacheStats() {
495
+ return {
496
+ size: this.cache.size
497
+ };
498
+ }
499
+ /**
500
+ * Analyze multiple violations with concurrency control
501
+ */
502
+ async analyzeViolations(violations, maxConcurrent = 3) {
503
+ const results = [];
504
+ // Process violations in batches to avoid overwhelming the API
505
+ for (let i = 0; i < violations.length; i += maxConcurrent) {
506
+ const batch = violations.slice(i, i + maxConcurrent);
507
+ const batchPromises = batch.map(violation => this.analyzeViolation(violation));
508
+ try {
509
+ const batchResults = await Promise.all(batchPromises);
510
+ results.push(...batchResults);
511
+ }
512
+ catch (error) {
513
+ console.error(`Error processing batch ${i / maxConcurrent + 1}:`, error);
514
+ // Process individually as fallback
515
+ for (const violation of batch) {
516
+ try {
517
+ const analysis = await this.analyzeViolation(violation);
518
+ results.push(analysis);
519
+ }
520
+ catch (individualError) {
521
+ console.error(`Error analyzing ${violation.feature}:`, individualError);
522
+ results.push(this.createFallbackAnalysis(violation, ErrorHandler.handleAPIError(individualError)));
523
+ }
524
+ }
525
+ }
526
+ // Add delay between batches to respect rate limits
527
+ if (i + maxConcurrent < violations.length) {
528
+ await new Promise(resolve => setTimeout(resolve, 1000));
529
+ }
530
+ }
531
+ return results;
532
+ }
533
+ /**
534
+ * Validate API key format
535
+ */
536
+ static validateApiKey(apiKey) {
537
+ // Gemini API keys typically start with 'AIza' and are 39 characters long
538
+ // But they can also have other formats, so let's be more flexible
539
+ return /^AIza[A-Za-z0-9_-]{35,}$/.test(apiKey) || apiKey.length >= 20;
540
+ }
541
+ /**
542
+ * Test API connectivity
543
+ */
544
+ async testConnection() {
545
+ try {
546
+ const testPrompt = 'Test connection. Please respond with "OK".';
547
+ const response = await this.makeApiCall(testPrompt);
548
+ // If we get here, the API call succeeded
549
+ const data = await response.json();
550
+ // Validate we got a proper response
551
+ if (data.candidates && data.candidates.length > 0) {
552
+ return { success: true };
553
+ }
554
+ else {
555
+ return {
556
+ success: false,
557
+ error: 'API responded but returned no content',
558
+ errorType: ErrorType.VALIDATION
559
+ };
560
+ }
561
+ }
562
+ catch (error) {
563
+ const apiError = ErrorHandler.handleAPIError(error);
564
+ return {
565
+ success: false,
566
+ error: apiError.message,
567
+ errorType: apiError.type
568
+ };
569
+ }
570
+ }
571
+ }
572
+ //# sourceMappingURL=gemini-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-analyzer.js","sourceRoot":"","sources":["../../src/ai/gemini-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './gemini-analyzer.js';
2
+ export * from './jules-implementer.js';
3
+ export * from './fix-manager.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // AI layer exports
2
+ export * from './gemini-analyzer.js';
3
+ export * from './jules-implementer.js';
4
+ export * from './fix-manager.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}