@probelabs/visor 0.1.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 (116) hide show
  1. package/README.md +1240 -0
  2. package/action.yml +142 -0
  3. package/defaults/.visor.yaml +184 -0
  4. package/dist/action-cli-bridge.d.ts +104 -0
  5. package/dist/action-cli-bridge.d.ts.map +1 -0
  6. package/dist/action-cli-bridge.js +372 -0
  7. package/dist/action-cli-bridge.js.map +1 -0
  8. package/dist/ai-review-service.d.ts +84 -0
  9. package/dist/ai-review-service.d.ts.map +1 -0
  10. package/dist/ai-review-service.js +674 -0
  11. package/dist/ai-review-service.js.map +1 -0
  12. package/dist/check-execution-engine.d.ts +165 -0
  13. package/dist/check-execution-engine.d.ts.map +1 -0
  14. package/dist/check-execution-engine.js +1172 -0
  15. package/dist/check-execution-engine.js.map +1 -0
  16. package/dist/cli-main.d.ts +6 -0
  17. package/dist/cli-main.d.ts.map +1 -0
  18. package/dist/cli-main.js +247 -0
  19. package/dist/cli-main.js.map +1 -0
  20. package/dist/cli.d.ts +47 -0
  21. package/dist/cli.d.ts.map +1 -0
  22. package/dist/cli.js +224 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/commands.d.ts +10 -0
  25. package/dist/commands.d.ts.map +1 -0
  26. package/dist/commands.js +53 -0
  27. package/dist/commands.js.map +1 -0
  28. package/dist/config.d.ts +63 -0
  29. package/dist/config.d.ts.map +1 -0
  30. package/dist/config.js +369 -0
  31. package/dist/config.js.map +1 -0
  32. package/dist/dependency-resolver.d.ts +54 -0
  33. package/dist/dependency-resolver.d.ts.map +1 -0
  34. package/dist/dependency-resolver.js +163 -0
  35. package/dist/dependency-resolver.js.map +1 -0
  36. package/dist/event-mapper.d.ts +125 -0
  37. package/dist/event-mapper.d.ts.map +1 -0
  38. package/dist/event-mapper.js +311 -0
  39. package/dist/event-mapper.js.map +1 -0
  40. package/dist/failure-condition-evaluator.d.ts +81 -0
  41. package/dist/failure-condition-evaluator.d.ts.map +1 -0
  42. package/dist/failure-condition-evaluator.js +445 -0
  43. package/dist/failure-condition-evaluator.js.map +1 -0
  44. package/dist/git-repository-analyzer.d.ts +45 -0
  45. package/dist/git-repository-analyzer.d.ts.map +1 -0
  46. package/dist/git-repository-analyzer.js +285 -0
  47. package/dist/git-repository-analyzer.js.map +1 -0
  48. package/dist/github-check-service.d.ts +104 -0
  49. package/dist/github-check-service.d.ts.map +1 -0
  50. package/dist/github-check-service.js +382 -0
  51. package/dist/github-check-service.js.map +1 -0
  52. package/dist/github-comments.d.ts +109 -0
  53. package/dist/github-comments.d.ts.map +1 -0
  54. package/dist/github-comments.js +289 -0
  55. package/dist/github-comments.js.map +1 -0
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +1265 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/output-formatters.d.ts +66 -0
  61. package/dist/output-formatters.d.ts.map +1 -0
  62. package/dist/output-formatters.js +624 -0
  63. package/dist/output-formatters.js.map +1 -0
  64. package/dist/pr-analyzer.d.ts +47 -0
  65. package/dist/pr-analyzer.d.ts.map +1 -0
  66. package/dist/pr-analyzer.js +194 -0
  67. package/dist/pr-analyzer.js.map +1 -0
  68. package/dist/pr-detector.d.ts +78 -0
  69. package/dist/pr-detector.d.ts.map +1 -0
  70. package/dist/pr-detector.js +357 -0
  71. package/dist/pr-detector.js.map +1 -0
  72. package/dist/providers/ai-check-provider.d.ts +40 -0
  73. package/dist/providers/ai-check-provider.d.ts.map +1 -0
  74. package/dist/providers/ai-check-provider.js +416 -0
  75. package/dist/providers/ai-check-provider.js.map +1 -0
  76. package/dist/providers/check-provider-registry.d.ts +67 -0
  77. package/dist/providers/check-provider-registry.d.ts.map +1 -0
  78. package/dist/providers/check-provider-registry.js +138 -0
  79. package/dist/providers/check-provider-registry.js.map +1 -0
  80. package/dist/providers/check-provider.interface.d.ts +78 -0
  81. package/dist/providers/check-provider.interface.d.ts.map +1 -0
  82. package/dist/providers/check-provider.interface.js +11 -0
  83. package/dist/providers/check-provider.interface.js.map +1 -0
  84. package/dist/providers/index.d.ts +10 -0
  85. package/dist/providers/index.d.ts.map +1 -0
  86. package/dist/providers/index.js +19 -0
  87. package/dist/providers/index.js.map +1 -0
  88. package/dist/providers/script-check-provider.d.ts +20 -0
  89. package/dist/providers/script-check-provider.d.ts.map +1 -0
  90. package/dist/providers/script-check-provider.js +163 -0
  91. package/dist/providers/script-check-provider.js.map +1 -0
  92. package/dist/providers/tool-check-provider.d.ts +19 -0
  93. package/dist/providers/tool-check-provider.d.ts.map +1 -0
  94. package/dist/providers/tool-check-provider.js +125 -0
  95. package/dist/providers/tool-check-provider.js.map +1 -0
  96. package/dist/providers/webhook-check-provider.d.ts +21 -0
  97. package/dist/providers/webhook-check-provider.d.ts.map +1 -0
  98. package/dist/providers/webhook-check-provider.js +173 -0
  99. package/dist/providers/webhook-check-provider.js.map +1 -0
  100. package/dist/reviewer.d.ts +88 -0
  101. package/dist/reviewer.d.ts.map +1 -0
  102. package/dist/reviewer.js +760 -0
  103. package/dist/reviewer.js.map +1 -0
  104. package/dist/types/cli.d.ts +41 -0
  105. package/dist/types/cli.d.ts.map +1 -0
  106. package/dist/types/cli.js +3 -0
  107. package/dist/types/cli.js.map +1 -0
  108. package/dist/types/config.d.ts +315 -0
  109. package/dist/types/config.d.ts.map +1 -0
  110. package/dist/types/config.js +6 -0
  111. package/dist/types/config.js.map +1 -0
  112. package/dist/utils/env-resolver.d.ts +38 -0
  113. package/dist/utils/env-resolver.d.ts.map +1 -0
  114. package/dist/utils/env-resolver.js +130 -0
  115. package/dist/utils/env-resolver.js.map +1 -0
  116. package/package.json +116 -0
@@ -0,0 +1,382 @@
1
+ "use strict";
2
+ /**
3
+ * GitHub Check Service for creating and managing check runs based on failure conditions
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GitHubCheckService = void 0;
7
+ /**
8
+ * Service for managing GitHub Check Runs based on Visor failure conditions
9
+ */
10
+ class GitHubCheckService {
11
+ octokit;
12
+ maxAnnotations = 50; // GitHub API limit
13
+ constructor(octokit) {
14
+ this.octokit = octokit;
15
+ }
16
+ /**
17
+ * Create a new check run in queued status
18
+ */
19
+ async createCheckRun(options, summary) {
20
+ try {
21
+ const response = await this.octokit.rest.checks.create({
22
+ owner: options.owner,
23
+ repo: options.repo,
24
+ name: options.name,
25
+ head_sha: options.head_sha,
26
+ status: 'queued',
27
+ details_url: options.details_url,
28
+ external_id: options.external_id,
29
+ output: summary
30
+ ? {
31
+ title: summary.title,
32
+ summary: summary.summary,
33
+ text: summary.text,
34
+ }
35
+ : undefined,
36
+ });
37
+ return {
38
+ id: response.data.id,
39
+ url: response.data.html_url || '',
40
+ };
41
+ }
42
+ catch (error) {
43
+ throw new Error(`Failed to create check run: ${error instanceof Error ? error.message : String(error)}`);
44
+ }
45
+ }
46
+ /**
47
+ * Update check run to in_progress status
48
+ */
49
+ async updateCheckRunInProgress(owner, repo, check_run_id, summary) {
50
+ try {
51
+ await this.octokit.rest.checks.update({
52
+ owner,
53
+ repo,
54
+ check_run_id,
55
+ status: 'in_progress',
56
+ output: summary
57
+ ? {
58
+ title: summary.title,
59
+ summary: summary.summary,
60
+ text: summary.text,
61
+ }
62
+ : undefined,
63
+ });
64
+ }
65
+ catch (error) {
66
+ throw new Error(`Failed to update check run to in_progress: ${error instanceof Error ? error.message : String(error)}`);
67
+ }
68
+ }
69
+ /**
70
+ * Complete a check run with results based on failure conditions
71
+ */
72
+ async completeCheckRun(owner, repo, check_run_id, checkName, failureResults, reviewIssues = [], executionError) {
73
+ try {
74
+ const { conclusion, summary } = this.determineCheckRunConclusion(checkName, failureResults, reviewIssues, executionError);
75
+ const annotations = this.convertIssuesToAnnotations(reviewIssues);
76
+ await this.octokit.rest.checks.update({
77
+ owner,
78
+ repo,
79
+ check_run_id,
80
+ status: 'completed',
81
+ conclusion,
82
+ completed_at: new Date().toISOString(),
83
+ output: {
84
+ title: summary.title,
85
+ summary: summary.summary,
86
+ text: summary.text,
87
+ annotations: annotations.slice(0, this.maxAnnotations), // GitHub limit
88
+ },
89
+ });
90
+ }
91
+ catch (error) {
92
+ throw new Error(`Failed to complete check run: ${error instanceof Error ? error.message : String(error)}`);
93
+ }
94
+ }
95
+ /**
96
+ * Determine check run conclusion based on failure conditions and issues
97
+ */
98
+ determineCheckRunConclusion(checkName, failureResults, reviewIssues, executionError) {
99
+ // Handle execution errors first
100
+ if (executionError) {
101
+ return {
102
+ conclusion: 'failure',
103
+ summary: {
104
+ title: '❌ Check Execution Failed',
105
+ summary: `The ${checkName} check failed to execute properly.`,
106
+ text: `**Error:** ${executionError}\n\nPlease check your configuration and try again.`,
107
+ },
108
+ };
109
+ }
110
+ // Check for failed conditions
111
+ const failedConditions = failureResults.filter(result => result.failed);
112
+ const errorConditions = failedConditions.filter(result => result.severity === 'error');
113
+ const warningConditions = failedConditions.filter(result => result.severity === 'warning');
114
+ // Count issues by severity
115
+ const criticalIssues = reviewIssues.filter(issue => issue.severity === 'critical').length;
116
+ const errorIssues = reviewIssues.filter(issue => issue.severity === 'error').length;
117
+ const warningIssues = reviewIssues.filter(issue => issue.severity === 'warning').length;
118
+ const totalIssues = reviewIssues.length;
119
+ // Determine conclusion based on failure conditions and issues
120
+ let conclusion;
121
+ let title;
122
+ let summaryText;
123
+ let details;
124
+ if (errorConditions.length > 0 || criticalIssues > 0) {
125
+ conclusion = 'failure';
126
+ title = '🚨 Check Failed';
127
+ summaryText = `${checkName} check failed due to ${errorConditions.length > 0 ? 'failure conditions' : 'critical issues'}.`;
128
+ details = this.formatCheckDetails(failureResults, reviewIssues, {
129
+ failedConditions: errorConditions.length,
130
+ warningConditions: warningConditions.length,
131
+ criticalIssues,
132
+ errorIssues,
133
+ warningIssues,
134
+ totalIssues,
135
+ });
136
+ }
137
+ else if (warningConditions.length > 0 || errorIssues > 0) {
138
+ conclusion = 'neutral';
139
+ title = '⚠️ Check Completed with Warnings';
140
+ summaryText = `${checkName} check completed but found ${warningConditions.length > 0 ? 'warning conditions' : 'error-level issues'}.`;
141
+ details = this.formatCheckDetails(failureResults, reviewIssues, {
142
+ failedConditions: 0,
143
+ warningConditions: warningConditions.length,
144
+ criticalIssues,
145
+ errorIssues,
146
+ warningIssues,
147
+ totalIssues,
148
+ });
149
+ }
150
+ else if (warningIssues > 0) {
151
+ conclusion = 'neutral';
152
+ title = '⚠️ Check Completed with Minor Issues';
153
+ summaryText = `${checkName} check completed with ${warningIssues} warning${warningIssues === 1 ? '' : 's'}.`;
154
+ details = this.formatCheckDetails(failureResults, reviewIssues, {
155
+ failedConditions: 0,
156
+ warningConditions: 0,
157
+ criticalIssues,
158
+ errorIssues,
159
+ warningIssues,
160
+ totalIssues,
161
+ });
162
+ }
163
+ else {
164
+ conclusion = 'success';
165
+ title = '✅ Check Passed';
166
+ summaryText = `${checkName} check completed successfully with no issues found.`;
167
+ details = this.formatCheckDetails(failureResults, reviewIssues, {
168
+ failedConditions: 0,
169
+ warningConditions: 0,
170
+ criticalIssues: 0,
171
+ errorIssues: 0,
172
+ warningIssues: 0,
173
+ totalIssues: 0,
174
+ });
175
+ }
176
+ return {
177
+ conclusion,
178
+ summary: {
179
+ title,
180
+ summary: summaryText,
181
+ text: details,
182
+ },
183
+ };
184
+ }
185
+ /**
186
+ * Format detailed check results for the check run summary
187
+ */
188
+ formatCheckDetails(failureResults, reviewIssues, counts) {
189
+ const sections = [];
190
+ // Summary section
191
+ sections.push('## 📊 Summary');
192
+ sections.push(`- **Total Issues:** ${counts.totalIssues}`);
193
+ if (counts.criticalIssues > 0) {
194
+ sections.push(`- **Critical Issues:** ${counts.criticalIssues}`);
195
+ }
196
+ if (counts.errorIssues > 0) {
197
+ sections.push(`- **Error Issues:** ${counts.errorIssues}`);
198
+ }
199
+ if (counts.warningIssues > 0) {
200
+ sections.push(`- **Warning Issues:** ${counts.warningIssues}`);
201
+ }
202
+ sections.push('');
203
+ // Failure conditions section
204
+ if (failureResults.length > 0) {
205
+ sections.push('## 🔍 Failure Condition Results');
206
+ const failedConditions = failureResults.filter(result => result.failed);
207
+ const passedConditions = failureResults.filter(result => !result.failed);
208
+ if (failedConditions.length > 0) {
209
+ sections.push('### ❌ Failed Conditions');
210
+ failedConditions.forEach(condition => {
211
+ sections.push(`- **${condition.conditionName}**: ${condition.message || condition.expression}`);
212
+ if (condition.severity === 'error') {
213
+ sections.push(` - ⚠️ **Severity:** Error`);
214
+ }
215
+ });
216
+ sections.push('');
217
+ }
218
+ if (passedConditions.length > 0) {
219
+ sections.push('### ✅ Passed Conditions');
220
+ passedConditions.forEach(condition => {
221
+ sections.push(`- **${condition.conditionName}**: ${condition.message || 'Condition passed'}`);
222
+ });
223
+ sections.push('');
224
+ }
225
+ }
226
+ // Issues by category section
227
+ if (reviewIssues.length > 0) {
228
+ const issuesByCategory = this.groupIssuesByCategory(reviewIssues);
229
+ sections.push('## 🐛 Issues by Category');
230
+ Object.entries(issuesByCategory).forEach(([category, issues]) => {
231
+ if (issues.length > 0) {
232
+ sections.push(`### ${this.getCategoryEmoji(category)} ${category.charAt(0).toUpperCase() + category.slice(1)} (${issues.length})`);
233
+ // Show only first 5 issues per category to keep the summary concise
234
+ const displayIssues = issues.slice(0, 5);
235
+ displayIssues.forEach(issue => {
236
+ const severityIcon = this.getSeverityIcon(issue.severity);
237
+ sections.push(`- ${severityIcon} **${issue.file}:${issue.line}** - ${issue.message}`);
238
+ });
239
+ if (issues.length > 5) {
240
+ sections.push(`- *...and ${issues.length - 5} more ${category} issues*`);
241
+ }
242
+ sections.push('');
243
+ }
244
+ });
245
+ }
246
+ // Footer
247
+ sections.push('---');
248
+ sections.push('*Generated by [Visor](https://github.com/probelabs/visor) - AI-powered code review*');
249
+ return sections.join('\n');
250
+ }
251
+ /**
252
+ * Convert review issues to GitHub check run annotations
253
+ */
254
+ convertIssuesToAnnotations(reviewIssues) {
255
+ return reviewIssues
256
+ .slice(0, this.maxAnnotations) // Respect GitHub's annotation limit
257
+ .map(issue => ({
258
+ path: issue.file,
259
+ start_line: issue.line,
260
+ end_line: issue.endLine || issue.line,
261
+ annotation_level: this.mapSeverityToAnnotationLevel(issue.severity),
262
+ message: issue.message,
263
+ title: `${issue.category} Issue`,
264
+ raw_details: issue.suggestion || undefined,
265
+ }));
266
+ }
267
+ /**
268
+ * Map Visor issue severity to GitHub annotation level
269
+ */
270
+ mapSeverityToAnnotationLevel(severity) {
271
+ switch (severity) {
272
+ case 'critical':
273
+ case 'error':
274
+ return 'failure';
275
+ case 'warning':
276
+ return 'warning';
277
+ case 'info':
278
+ default:
279
+ return 'notice';
280
+ }
281
+ }
282
+ /**
283
+ * Group issues by category
284
+ */
285
+ groupIssuesByCategory(issues) {
286
+ const grouped = {};
287
+ issues.forEach(issue => {
288
+ const category = issue.category || 'general';
289
+ if (!grouped[category]) {
290
+ grouped[category] = [];
291
+ }
292
+ grouped[category].push(issue);
293
+ });
294
+ return grouped;
295
+ }
296
+ /**
297
+ * Get emoji for issue category
298
+ */
299
+ getCategoryEmoji(category) {
300
+ const emojiMap = {
301
+ security: '🔐',
302
+ performance: '⚡',
303
+ style: '🎨',
304
+ logic: '🧠',
305
+ architecture: '🏗️',
306
+ documentation: '📚',
307
+ general: '📝',
308
+ };
309
+ return emojiMap[category.toLowerCase()] || '📝';
310
+ }
311
+ /**
312
+ * Get icon for issue severity
313
+ */
314
+ getSeverityIcon(severity) {
315
+ const iconMap = {
316
+ critical: '🚨',
317
+ error: '❌',
318
+ warning: '⚠️',
319
+ info: 'ℹ️',
320
+ };
321
+ return iconMap[severity.toLowerCase()] || 'ℹ️';
322
+ }
323
+ /**
324
+ * Create multiple check runs for different checks with failure condition support
325
+ */
326
+ async createMultipleCheckRuns(options, checkResults) {
327
+ const results = [];
328
+ for (const checkResult of checkResults) {
329
+ try {
330
+ // Create check run
331
+ const checkRun = await this.createCheckRun({
332
+ ...options,
333
+ name: `Visor: ${checkResult.checkName}`,
334
+ external_id: `visor-${checkResult.checkName}-${options.head_sha.substring(0, 7)}`,
335
+ });
336
+ // Update to in progress
337
+ await this.updateCheckRunInProgress(options.owner, options.repo, checkRun.id, {
338
+ title: `Running ${checkResult.checkName} check...`,
339
+ summary: `Analyzing code with ${checkResult.checkName} check using AI.`,
340
+ });
341
+ // Complete with results
342
+ await this.completeCheckRun(options.owner, options.repo, checkRun.id, checkResult.checkName, checkResult.failureResults, checkResult.reviewIssues, checkResult.executionError);
343
+ results.push({
344
+ checkName: checkResult.checkName,
345
+ id: checkRun.id,
346
+ url: checkRun.url,
347
+ });
348
+ }
349
+ catch (error) {
350
+ console.error(`Failed to create check run for ${checkResult.checkName}:`, error);
351
+ // Continue with other checks even if one fails
352
+ }
353
+ }
354
+ return results;
355
+ }
356
+ /**
357
+ * Get check runs for a specific commit
358
+ */
359
+ async getCheckRuns(owner, repo, ref) {
360
+ try {
361
+ const response = await this.octokit.rest.checks.listForRef({
362
+ owner,
363
+ repo,
364
+ ref,
365
+ filter: 'all',
366
+ });
367
+ return response.data.check_runs
368
+ .filter(check => check.name.startsWith('Visor:'))
369
+ .map(check => ({
370
+ id: check.id,
371
+ name: check.name,
372
+ status: check.status,
373
+ conclusion: check.conclusion,
374
+ }));
375
+ }
376
+ catch (error) {
377
+ throw new Error(`Failed to get check runs: ${error instanceof Error ? error.message : String(error)}`);
378
+ }
379
+ }
380
+ }
381
+ exports.GitHubCheckService = GitHubCheckService;
382
+ //# sourceMappingURL=github-check-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-check-service.js","sourceRoot":"","sources":["../src/github-check-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { Octokit } from '@octokit/rest';
2
+ export interface Comment {
3
+ id: number;
4
+ body: string;
5
+ user: {
6
+ login: string;
7
+ };
8
+ created_at: string;
9
+ updated_at: string;
10
+ }
11
+ export interface RetryConfig {
12
+ maxRetries: number;
13
+ baseDelay: number;
14
+ maxDelay: number;
15
+ backoffFactor: number;
16
+ }
17
+ export interface CommentMetadata {
18
+ commentId: string;
19
+ lastUpdated: string;
20
+ triggeredBy: string;
21
+ commitSha?: string;
22
+ }
23
+ /**
24
+ * Manages GitHub PR comments with dynamic updating capabilities
25
+ */
26
+ export declare class CommentManager {
27
+ private octokit;
28
+ private retryConfig;
29
+ constructor(octokit: Octokit, retryConfig?: Partial<RetryConfig>);
30
+ /**
31
+ * Find existing Visor comment by comment ID marker
32
+ */
33
+ findVisorComment(owner: string, repo: string, prNumber: number, commentId?: string): Promise<Comment | null>;
34
+ /**
35
+ * Update existing comment or create new one with collision detection
36
+ */
37
+ updateOrCreateComment(owner: string, repo: string, prNumber: number, content: string, options?: {
38
+ commentId?: string;
39
+ triggeredBy?: string;
40
+ allowConcurrentUpdates?: boolean;
41
+ commitSha?: string;
42
+ }): Promise<Comment>;
43
+ /**
44
+ * Format comment content with metadata markers
45
+ */
46
+ formatCommentWithMetadata(content: string, metadata: CommentMetadata): string;
47
+ /**
48
+ * Create collapsible sections for comment content
49
+ */
50
+ createCollapsibleSection(title: string, content: string, isExpanded?: boolean): string;
51
+ /**
52
+ * Group review results by check type with collapsible sections
53
+ */
54
+ formatGroupedResults(results: Array<{
55
+ checkType: string;
56
+ content: string;
57
+ score?: number;
58
+ issuesFound?: number;
59
+ }>, groupBy?: 'check' | 'severity'): string;
60
+ /**
61
+ * Generate unique comment ID
62
+ */
63
+ private generateCommentId;
64
+ /**
65
+ * Check if comment is a Visor comment
66
+ */
67
+ private isVisorComment;
68
+ /**
69
+ * Extract comment ID from comment body
70
+ */
71
+ extractCommentId(body: string): string | null;
72
+ /**
73
+ * Handle rate limiting with exponential backoff
74
+ */
75
+ private handleRateLimit;
76
+ /**
77
+ * Check if error is a rate limit error
78
+ */
79
+ private isRateLimitError;
80
+ /**
81
+ * Check if error should not be retried (auth errors, not found, etc.)
82
+ */
83
+ private isNonRetryableError;
84
+ /**
85
+ * Retry wrapper with exponential backoff
86
+ */
87
+ private withRetry;
88
+ /**
89
+ * Sleep utility
90
+ */
91
+ private sleep;
92
+ /**
93
+ * Group results by specified criteria
94
+ */
95
+ private groupResults;
96
+ /**
97
+ * Get severity group based on score
98
+ */
99
+ private getSeverityGroup;
100
+ /**
101
+ * Get emoji for check type
102
+ */
103
+ private getCheckTypeEmoji;
104
+ /**
105
+ * Format group title with score and issue count
106
+ */
107
+ private formatGroupTitle;
108
+ }
109
+ //# sourceMappingURL=github-comments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-comments.d.ts","sourceRoot":"","sources":["../src/github-comments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAc;gBAErB,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;IAWhE;;OAEG;IACU,gBAAgB,CAC3B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IA6B1B;;OAEG;IACU,qBAAqB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GACL,OAAO,CAAC,OAAO,CAAC;IAuDnB;;OAEG;IACI,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM;IAYpF;;OAEG;IACI,wBAAwB,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,OAAe,GAC1B,MAAM;IAUT;;OAEG;IACI,oBAAoB,CACzB,OAAO,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAC5F,OAAO,GAAE,OAAO,GAAG,UAAoB,GACtC,MAAM;IAkBT;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAuBtB;;OAEG;IACI,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKpD;;OAEG;YACW,eAAe;IAc7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;YACW,SAAS;IAmCvB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,OAAO,CAAC,YAAY;IAuBpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAIzB"}