@probelabs/visor 0.1.38 → 0.1.39

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.
package/dist/index.js CHANGED
@@ -93923,9 +93923,6 @@ class AIReviewService {
93923
93923
  category: 'logic',
93924
93924
  },
93925
93925
  ],
93926
- suggestions: [
93927
- 'Configure API keys in your GitHub repository secrets or environment variables',
93928
- ],
93929
93926
  debug: debugInfo,
93930
93927
  };
93931
93928
  }
@@ -93962,7 +93959,6 @@ class AIReviewService {
93962
93959
  category: 'logic',
93963
93960
  },
93964
93961
  ],
93965
- suggestions: ['Check AI service configuration and API key validity'],
93966
93962
  debug: debugInfo,
93967
93963
  };
93968
93964
  }
@@ -94034,9 +94030,6 @@ class AIReviewService {
94034
94030
  category: 'logic',
94035
94031
  },
94036
94032
  ],
94037
- suggestions: [
94038
- 'Check session reuse configuration and ensure parent check completed successfully',
94039
- ],
94040
94033
  debug: debugInfo,
94041
94034
  };
94042
94035
  }
@@ -94577,23 +94570,18 @@ ${prInfo.fullDiff ? this.escapeXml(prInfo.fullDiff) : ''}
94577
94570
  // Handle plain schema or no schema - no JSON parsing, return response as-is
94578
94571
  if (_schema === 'plain' || !_schema) {
94579
94572
  log(`📋 ${_schema === 'plain' ? 'Plain' : 'No'} schema detected - returning raw response without JSON parsing`);
94580
- // Strip common XML wrapper tags that AI might add when given XML-formatted prompts
94581
- let cleanedResponse = response.trim();
94582
- // Remove <result>...</result> tags if present
94583
- cleanedResponse = cleanedResponse
94584
- .replace(/^<result>\s*/i, '')
94585
- .replace(/\s*<\/result>$/i, '');
94586
- // Remove <response>...</response> tags if present
94587
- cleanedResponse = cleanedResponse
94588
- .replace(/^<response>\s*/i, '')
94589
- .replace(/\s*<\/response>$/i, '');
94590
- // Remove <answer>...</answer> tags if present
94591
- cleanedResponse = cleanedResponse
94592
- .replace(/^<answer>\s*/i, '')
94593
- .replace(/\s*<\/answer>$/i, '');
94573
+ // For plain schema, return the raw response as an issue
94594
94574
  return {
94595
- issues: [],
94596
- suggestions: [cleanedResponse.trim()],
94575
+ issues: [
94576
+ {
94577
+ file: 'AI_RESPONSE',
94578
+ line: 1,
94579
+ ruleId: 'ai/raw_response',
94580
+ message: response,
94581
+ severity: 'info',
94582
+ category: 'documentation',
94583
+ },
94584
+ ],
94597
94585
  debug: debugInfo,
94598
94586
  };
94599
94587
  }
@@ -94615,9 +94603,6 @@ ${prInfo.fullDiff ? this.escapeXml(prInfo.fullDiff) : ''}
94615
94603
  console.error('🚫 AI refused to analyze - returning empty result');
94616
94604
  return {
94617
94605
  issues: [],
94618
- suggestions: [
94619
- 'AI was unable to analyze this code. Please check the content or try again.',
94620
- ],
94621
94606
  };
94622
94607
  }
94623
94608
  // Try to extract JSON using improved method with proper bracket matching
@@ -94634,24 +94619,33 @@ ${prInfo.fullDiff ? this.escapeXml(prInfo.fullDiff) : ''}
94634
94619
  // Check if response is plain text and doesn't contain structured data
94635
94620
  if (!response.includes('{') && !response.includes('}')) {
94636
94621
  log('🔧 Plain text response detected, creating structured fallback...');
94637
- const isNoChanges = response.toLowerCase().includes('no') &&
94638
- (response.toLowerCase().includes('changes') ||
94639
- response.toLowerCase().includes('code'));
94640
94622
  reviewData = {
94641
- issues: [],
94642
- suggestions: isNoChanges
94643
- ? ['No code changes detected in this analysis']
94644
- : [
94645
- `AI response: ${response.substring(0, 200)}${response.length > 200 ? '...' : ''}`,
94646
- ],
94623
+ issues: [
94624
+ {
94625
+ file: 'AI_RESPONSE',
94626
+ line: 1,
94627
+ ruleId: 'ai/raw_response',
94628
+ message: response,
94629
+ severity: 'info',
94630
+ category: 'documentation',
94631
+ },
94632
+ ],
94647
94633
  };
94648
94634
  }
94649
94635
  else {
94650
- // Fallback: treat the entire response as a suggestion
94636
+ // Fallback: treat the entire response as an issue
94651
94637
  log('🔧 Creating fallback response from non-JSON content...');
94652
94638
  reviewData = {
94653
- issues: [],
94654
- suggestions: [response.trim()],
94639
+ issues: [
94640
+ {
94641
+ file: 'AI_RESPONSE',
94642
+ line: 1,
94643
+ ruleId: 'ai/raw_response',
94644
+ message: response,
94645
+ severity: 'info',
94646
+ category: 'documentation',
94647
+ },
94648
+ ],
94655
94649
  };
94656
94650
  }
94657
94651
  }
@@ -94660,8 +94654,16 @@ ${prInfo.fullDiff ? this.escapeXml(prInfo.fullDiff) : ''}
94660
94654
  // No JSON found at all - treat as plain text response
94661
94655
  log('🔧 No JSON found in response, treating as plain text...');
94662
94656
  reviewData = {
94663
- issues: [],
94664
- suggestions: [response.trim()],
94657
+ issues: [
94658
+ {
94659
+ file: 'AI_RESPONSE',
94660
+ line: 1,
94661
+ ruleId: 'ai/raw_response',
94662
+ message: response,
94663
+ severity: 'info',
94664
+ category: 'documentation',
94665
+ },
94666
+ ],
94665
94667
  };
94666
94668
  }
94667
94669
  }
@@ -94671,7 +94673,6 @@ ${prInfo.fullDiff ? this.escapeXml(prInfo.fullDiff) : ''}
94671
94673
  log(`📊 Overall score: ${0}`);
94672
94674
  log(`📋 Total issues: ${reviewData.issues?.length || 0}`);
94673
94675
  log(`🚨 Critical issues: ${reviewData.issues?.filter((i) => i.severity === 'critical').length || 0}`);
94674
- log(`💡 Suggestions count: ${Array.isArray(reviewData.suggestions) ? reviewData.suggestions.length : 0}`);
94675
94676
  log(`💬 Comments count: ${Array.isArray(reviewData.issues) ? reviewData.issues.length : 0}`);
94676
94677
  // Process issues from the simplified format
94677
94678
  const processedIssues = Array.isArray(reviewData.issues)
@@ -94693,7 +94694,6 @@ ${prInfo.fullDiff ? this.escapeXml(prInfo.fullDiff) : ''}
94693
94694
  // Validate and convert to ReviewSummary format
94694
94695
  const result = {
94695
94696
  issues: processedIssues,
94696
- suggestions: Array.isArray(reviewData.suggestions) ? reviewData.suggestions : [],
94697
94697
  };
94698
94698
  // Log issue counts
94699
94699
  const criticalCount = (result.issues || []).filter(i => i.severity === 'critical').length;
@@ -95395,12 +95395,9 @@ class CheckExecutionEngine {
95395
95395
  continue;
95396
95396
  // Extract issues for this check
95397
95397
  const checkIssues = (reviewSummary.issues || []).filter(issue => issue.ruleId?.startsWith(`${checkName}/`));
95398
- // Extract suggestions for this check
95399
- const checkSuggestions = (reviewSummary.suggestions || []).filter(suggestion => suggestion.startsWith(`[${checkName}]`));
95400
95398
  // Create a mini ReviewSummary for this check
95401
95399
  const checkSummary = {
95402
95400
  issues: checkIssues,
95403
- suggestions: checkSuggestions,
95404
95401
  debug: reviewSummary.debug,
95405
95402
  };
95406
95403
  // Render content for this check
@@ -95514,12 +95511,7 @@ class CheckExecutionEngine {
95514
95511
  }
95515
95512
  else if (schema === 'plain') {
95516
95513
  // Plain schema - return raw content directly
95517
- // Strip [checkName] prefixes from suggestions before joining
95518
- const cleanedSuggestions = (reviewSummary.suggestions || []).map(suggestion => {
95519
- // Remove [checkName] prefix if present
95520
- return suggestion.replace(/^\[[^\]]+\]\s*/, '');
95521
- });
95522
- return (reviewSummary.issues?.[0]?.message || '') + (cleanedSuggestions.join('\n\n') || '');
95514
+ return reviewSummary.issues?.[0]?.message || '';
95523
95515
  }
95524
95516
  else {
95525
95517
  // Use built-in schema template
@@ -95534,7 +95526,6 @@ class CheckExecutionEngine {
95534
95526
  const templateData = {
95535
95527
  issues: reviewSummary.issues || [],
95536
95528
  checkName: checkName,
95537
- suggestions: reviewSummary.suggestions || [],
95538
95529
  };
95539
95530
  const rendered = await liquid.parseAndRender(templateContent, templateData);
95540
95531
  return rendered.trim();
@@ -95597,7 +95588,6 @@ class CheckExecutionEngine {
95597
95588
  category: 'logic',
95598
95589
  },
95599
95590
  ],
95600
- suggestions: [],
95601
95591
  };
95602
95592
  }
95603
95593
  // Build dependency graph
@@ -95614,7 +95604,6 @@ class CheckExecutionEngine {
95614
95604
  category: 'logic',
95615
95605
  },
95616
95606
  ],
95617
- suggestions: [],
95618
95607
  };
95619
95608
  }
95620
95609
  // Log execution plan
@@ -95668,7 +95657,6 @@ class CheckExecutionEngine {
95668
95657
  error: null,
95669
95658
  result: {
95670
95659
  issues: [],
95671
- suggestions: [`Check '${checkName}' was skipped - condition not met`],
95672
95660
  },
95673
95661
  };
95674
95662
  }
@@ -95781,7 +95769,6 @@ class CheckExecutionEngine {
95781
95769
  replacement: undefined,
95782
95770
  },
95783
95771
  ],
95784
- suggestions: [],
95785
95772
  };
95786
95773
  results.set(checkName, errorSummary);
95787
95774
  // Check if we should stop execution due to fail-fast
@@ -95879,7 +95866,6 @@ class CheckExecutionEngine {
95879
95866
  error: null,
95880
95867
  result: {
95881
95868
  issues: [],
95882
- suggestions: [`Check '${checkName}' was skipped - condition not met`],
95883
95869
  },
95884
95870
  };
95885
95871
  }
@@ -96001,7 +95987,6 @@ class CheckExecutionEngine {
96001
95987
  */
96002
95988
  aggregateDependencyAwareResults(results, dependencyGraph, debug, stoppedEarly) {
96003
95989
  const aggregatedIssues = [];
96004
- const aggregatedSuggestions = [];
96005
95990
  const debugInfo = [];
96006
95991
  // Add execution plan info
96007
95992
  const stats = dependency_resolver_1.DependencyResolver.getExecutionStats(dependencyGraph);
@@ -96035,13 +96020,8 @@ class CheckExecutionEngine {
96035
96020
  }
96036
96021
  // Issues are already prefixed and enriched with group/schema info
96037
96022
  aggregatedIssues.push(...(result.issues || []));
96038
- // Add suggestions with check name prefix
96039
- const prefixedSuggestions = (result.suggestions || []).map(suggestion => `[${checkName}] ${suggestion}`);
96040
- aggregatedSuggestions.push(...prefixedSuggestions);
96041
96023
  }
96042
96024
  }
96043
- // Add summary information
96044
- aggregatedSuggestions.unshift(...debugInfo);
96045
96025
  console.error(`🔧 Debug: Aggregated ${aggregatedIssues.length} issues from ${results.size} dependency-aware checks`);
96046
96026
  // Apply issue suppression filtering
96047
96027
  const suppressionEnabled = this.config?.output?.suppressionEnabled !== false;
@@ -96086,25 +96066,20 @@ class CheckExecutionEngine {
96086
96066
  }
96087
96067
  return {
96088
96068
  issues: filteredIssues,
96089
- suggestions: aggregatedSuggestions,
96090
96069
  debug: aggregatedDebug,
96091
96070
  };
96092
96071
  }
96093
96072
  /**
96094
96073
  * Aggregate results from parallel check execution (legacy method)
96095
96074
  */
96096
- aggregateParallelResults(results, checkNames, debug, stoppedEarly) {
96075
+ aggregateParallelResults(results, checkNames, debug, _stoppedEarly) {
96097
96076
  const aggregatedIssues = [];
96098
- const aggregatedSuggestions = [];
96099
96077
  const debugInfo = [];
96100
- let successfulChecks = 0;
96101
- let failedChecks = 0;
96102
96078
  results.forEach((result, index) => {
96103
96079
  const checkName = checkNames[index];
96104
96080
  if (result.status === 'fulfilled') {
96105
96081
  const checkResult = result.value;
96106
96082
  if (checkResult.error) {
96107
- failedChecks++;
96108
96083
  const log = console.error;
96109
96084
  log(`🔧 Debug: Check ${checkName} failed: ${checkResult.error}`);
96110
96085
  debugInfo.push(`❌ Check "${checkName}" failed: ${checkResult.error}`);
@@ -96130,18 +96105,13 @@ class CheckExecutionEngine {
96130
96105
  });
96131
96106
  }
96132
96107
  else if (checkResult.result) {
96133
- successfulChecks++;
96134
96108
  console.error(`🔧 Debug: Check ${checkName} succeeded with ${(checkResult.result.issues || []).length} issues`);
96135
96109
  debugInfo.push(`✅ Check "${checkName}" completed: ${(checkResult.result.issues || []).length} issues found`);
96136
96110
  // Issues are already prefixed and enriched with group/schema info
96137
96111
  aggregatedIssues.push(...(checkResult.result.issues || []));
96138
- // Add suggestions with check name prefix
96139
- const prefixedSuggestions = (checkResult.result.suggestions || []).map(suggestion => `[${checkName}] ${suggestion}`);
96140
- aggregatedSuggestions.push(...prefixedSuggestions);
96141
96112
  }
96142
96113
  }
96143
96114
  else {
96144
- failedChecks++;
96145
96115
  const errorMessage = result.reason instanceof Error ? result.reason.message : String(result.reason);
96146
96116
  const log = console.error;
96147
96117
  log(`🔧 Debug: Check ${checkName} promise rejected: ${errorMessage}`);
@@ -96167,11 +96137,6 @@ class CheckExecutionEngine {
96167
96137
  });
96168
96138
  }
96169
96139
  });
96170
- // Add summary information
96171
- debugInfo.unshift(stoppedEarly
96172
- ? `🛑 Parallel execution stopped early (fail-fast): ${successfulChecks} successful, ${failedChecks} failed`
96173
- : `🔍 Parallel execution completed: ${successfulChecks} successful, ${failedChecks} failed`);
96174
- aggregatedSuggestions.unshift(...debugInfo);
96175
96140
  console.error(`🔧 Debug: Aggregated ${aggregatedIssues.length} issues from ${results.length} checks`);
96176
96141
  // Apply issue suppression filtering
96177
96142
  const suppressionEnabled = this.config?.output?.suppressionEnabled !== false;
@@ -96273,7 +96238,6 @@ class CheckExecutionEngine {
96273
96238
  }
96274
96239
  return {
96275
96240
  issues: filteredIssues,
96276
- suggestions: aggregatedSuggestions,
96277
96241
  debug: aggregatedDebug,
96278
96242
  };
96279
96243
  }
@@ -96384,7 +96348,6 @@ class CheckExecutionEngine {
96384
96348
  replacement: undefined,
96385
96349
  },
96386
96350
  ],
96387
- suggestions: [`Error: ${errorMessage}`],
96388
96351
  },
96389
96352
  executionTime,
96390
96353
  timestamp,
@@ -96599,7 +96562,7 @@ class CheckExecutionEngine {
96599
96562
  try {
96600
96563
  const checkIssues = issuesByCheck.get(checkName) || [];
96601
96564
  // Evaluate failure conditions for this specific check
96602
- const failureResults = await this.evaluateFailureConditions(checkName, { issues: checkIssues, suggestions: [] }, options.config);
96565
+ const failureResults = await this.evaluateFailureConditions(checkName, { issues: checkIssues }, options.config);
96603
96566
  await this.githubCheckService.completeCheckRun(options.githubChecks.owner, options.githubChecks.repo, checkRun.id, checkName, failureResults, checkIssues);
96604
96567
  console.log(`✅ Completed ${checkName} check with ${checkIssues.length} issues`);
96605
96568
  }
@@ -96875,7 +96838,6 @@ async function main() {
96875
96838
  issues: Object.values(groupedResults)
96876
96839
  .flatMap((r) => r.map((check) => check.issues || []).flat())
96877
96840
  .flat(),
96878
- suggestions: [],
96879
96841
  },
96880
96842
  executionTime: 0,
96881
96843
  timestamp: new Date().toISOString(),
@@ -96891,7 +96853,6 @@ async function main() {
96891
96853
  issues: Object.values(groupedResults)
96892
96854
  .flatMap((r) => r.map((check) => check.issues || []).flat())
96893
96855
  .flat(),
96894
- suggestions: [], // Suggestions are now embedded in issues
96895
96856
  },
96896
96857
  executionTime: 0,
96897
96858
  timestamp: new Date().toISOString(),
@@ -96907,7 +96868,6 @@ async function main() {
96907
96868
  issues: Object.values(groupedResults)
96908
96869
  .flatMap((r) => r.map((check) => check.issues || []).flat())
96909
96870
  .flat(),
96910
- suggestions: [], // Suggestions are now embedded in issues
96911
96871
  },
96912
96872
  executionTime: 0,
96913
96873
  timestamp: new Date().toISOString(),
@@ -98331,7 +98291,6 @@ class FailureConditionEvaluator {
98331
98291
  // Required output property (empty for if conditions)
98332
98292
  output: {
98333
98293
  issues: [],
98334
- suggestions: [],
98335
98294
  },
98336
98295
  // Utility metadata
98337
98296
  metadata: {
@@ -98473,7 +98432,7 @@ class FailureConditionEvaluator {
98473
98432
  // Extract context variables
98474
98433
  const output = context.output || {};
98475
98434
  const issues = output.issues || [];
98476
- const suggestions = output.suggestions || [];
98435
+ const suggestions = [];
98477
98436
  // Backward compatibility: provide metadata for transition period
98478
98437
  // TODO: Remove after all configurations are updated
98479
98438
  const metadata = context.metadata || {
@@ -98584,7 +98543,7 @@ class FailureConditionEvaluator {
98584
98543
  * Build the evaluation context for expressions
98585
98544
  */
98586
98545
  buildEvaluationContext(checkName, checkSchema, checkGroup, reviewSummary, previousOutputs) {
98587
- const { issues, suggestions, debug } = reviewSummary;
98546
+ const { issues, debug } = reviewSummary;
98588
98547
  const context = {
98589
98548
  output: {
98590
98549
  issues: (issues || []).map(issue => ({
@@ -98600,7 +98559,6 @@ class FailureConditionEvaluator {
98600
98559
  suggestion: issue.suggestion,
98601
98560
  replacement: issue.replacement,
98602
98561
  })),
98603
- suggestions,
98604
98562
  // Include additional schema-specific data from reviewSummary
98605
98563
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
98606
98564
  ...reviewSummary, // Pass through any additional fields
@@ -100743,7 +100701,6 @@ async function completeIndividualChecks(checkService, owner, repo, checkRunMap,
100743
100701
  // Create a ReviewSummary for this check's issues
100744
100702
  const checkReviewSummary = {
100745
100703
  issues: checkIssues,
100746
- suggestions: [],
100747
100704
  };
100748
100705
  // Determine which fail_if to use: check-specific overrides global
100749
100706
  const effectiveFailIf = checkFailIf || globalFailIf;
@@ -100791,7 +100748,6 @@ async function completeCombinedCheck(checkService, owner, repo, checkRunMap, gro
100791
100748
  // Create a combined ReviewSummary with all issues
100792
100749
  const combinedReviewSummary = {
100793
100750
  issues: allIssues,
100794
- suggestions: [],
100795
100751
  };
100796
100752
  // Evaluate global fail_if for the combined check
100797
100753
  const globalFailIf = config?.fail_if;
@@ -101137,22 +101093,6 @@ class OutputFormatters {
101137
101093
  else {
101138
101094
  output += 'No issues found!\n\n';
101139
101095
  }
101140
- // Suggestions table
101141
- if ((result.reviewSummary.suggestions || []).length > 0) {
101142
- const suggestionsTable = new cli_table3_1.default({
101143
- head: ['#', 'Suggestion'],
101144
- colWidths: [5, 70],
101145
- style: {
101146
- head: ['cyan', 'bold'],
101147
- border: ['grey'],
101148
- },
101149
- });
101150
- output += 'Suggestions\n';
101151
- (result.reviewSummary.suggestions || []).forEach((suggestion, index) => {
101152
- suggestionsTable.push([(index + 1).toString(), this.wrapText(suggestion, 65)]);
101153
- });
101154
- output += suggestionsTable.toString() + '\n\n';
101155
- }
101156
101096
  // Files table (if requested)
101157
101097
  if (options.includeFiles && result.repositoryInfo.files.length > 0) {
101158
101098
  const filesTable = new cli_table3_1.default({
@@ -101210,7 +101150,6 @@ class OutputFormatters {
101210
101150
  issues: options.groupByCategory
101211
101151
  ? this.groupCommentsByCategory((0, reviewer_1.convertIssuesToComments)(issues || []))
101212
101152
  : issues || [],
101213
- suggestions: result.reviewSummary.suggestions || [],
101214
101153
  files: options.includeFiles ? result.repositoryInfo.files : undefined,
101215
101154
  debug: result.debug, // Include debug information when available
101216
101155
  failureConditions: result.failureConditions || [], // Include failure condition results
@@ -101507,14 +101446,6 @@ class OutputFormatters {
101507
101446
  output += `## No Issues Found\n\n`;
101508
101447
  output += `Great job! No issues were detected in the analyzed code.\n\n`;
101509
101448
  }
101510
- // Suggestions
101511
- if ((result.reviewSummary.suggestions || []).length > 0) {
101512
- output += `## Recommendations\n\n`;
101513
- (result.reviewSummary.suggestions || []).forEach((suggestion, index) => {
101514
- output += `${index + 1}. ${suggestion}\n`;
101515
- });
101516
- output += '\n';
101517
- }
101518
101449
  // Files (if requested)
101519
101450
  if (options.includeFiles && result.repositoryInfo.files.length > 0) {
101520
101451
  output += `## Files Changed\n\n`;
@@ -102196,9 +102127,8 @@ class AICheckProvider extends check_provider_interface_1.CheckProvider {
102196
102127
  styleIssues: result.issues?.filter(i => i.category === 'style') || [],
102197
102128
  logicIssues: result.issues?.filter(i => i.category === 'logic') || [],
102198
102129
  documentationIssues: result.issues?.filter(i => i.category === 'documentation') || [],
102199
- // All issues and suggestions
102130
+ // All issues
102200
102131
  issues: result.issues || [],
102201
- suggestions: result.suggestions || [],
102202
102132
  // Debug information if available
102203
102133
  debug: result.debug,
102204
102134
  // Raw data for advanced use
@@ -103008,7 +102938,6 @@ class ClaudeCodeCheckProvider extends check_provider_interface_1.CheckProvider {
103008
102938
  documentationIssues: result.issues?.filter(i => i.category === 'documentation') || [],
103009
102939
  // All issues and suggestions
103010
102940
  issues: result.issues || [],
103011
- suggestions: result.suggestions || [],
103012
102941
  // Debug information if available
103013
102942
  debug: result.debug,
103014
102943
  // Raw data for advanced use
@@ -103034,14 +102963,12 @@ class ClaudeCodeCheckProvider extends check_provider_interface_1.CheckProvider {
103034
102963
  // Convert to ReviewSummary format
103035
102964
  return {
103036
102965
  issues: parsed.issues || [],
103037
- suggestions: parsed.suggestions || [],
103038
102966
  };
103039
102967
  }
103040
102968
  catch {
103041
102969
  // If not JSON, treat as plain text comment
103042
102970
  return {
103043
102971
  issues: [],
103044
- suggestions: [],
103045
102972
  };
103046
102973
  }
103047
102974
  }
@@ -103422,7 +103349,6 @@ class HttpCheckProvider extends check_provider_interface_1.CheckProvider {
103422
103349
  : [];
103423
103350
  return {
103424
103351
  issues,
103425
- suggestions: Array.isArray(response.suggestions) ? response.suggestions : [],
103426
103352
  };
103427
103353
  }
103428
103354
  createErrorResult(url, error) {
@@ -103441,7 +103367,6 @@ class HttpCheckProvider extends check_provider_interface_1.CheckProvider {
103441
103367
  replacement: undefined,
103442
103368
  },
103443
103369
  ],
103444
- suggestions: [`Webhook ${url} failed: ${errorMessage}`],
103445
103370
  };
103446
103371
  }
103447
103372
  validateSeverity(severity) {
@@ -103602,16 +103527,14 @@ class HttpClientProvider extends check_provider_interface_1.CheckProvider {
103602
103527
  category: 'logic',
103603
103528
  },
103604
103529
  ],
103605
- suggestions: [],
103606
103530
  };
103607
103531
  }
103608
103532
  }
103609
- // Return the fetched data as suggestions for dependent checks to access
103533
+ // Return the fetched data as a custom field for dependent checks to access
103610
103534
  return {
103611
103535
  issues: [],
103612
- suggestions: [
103613
- typeof processedData === 'string' ? processedData : JSON.stringify(processedData),
103614
- ],
103536
+ // Add custom data field that will be passed through to dependent checks
103537
+ data: processedData,
103615
103538
  };
103616
103539
  }
103617
103540
  catch (error) {
@@ -103626,7 +103549,6 @@ class HttpClientProvider extends check_provider_interface_1.CheckProvider {
103626
103549
  category: 'logic',
103627
103550
  },
103628
103551
  ],
103629
- suggestions: [],
103630
103552
  };
103631
103553
  }
103632
103554
  }
@@ -103781,7 +103703,6 @@ class HttpInputProvider extends check_provider_interface_1.CheckProvider {
103781
103703
  if (!webhookData) {
103782
103704
  return {
103783
103705
  issues: [],
103784
- suggestions: [`Waiting for webhook data on endpoint: ${endpoint}`],
103785
103706
  };
103786
103707
  }
103787
103708
  // Apply transformation if specified
@@ -103813,15 +103734,15 @@ class HttpInputProvider extends check_provider_interface_1.CheckProvider {
103813
103734
  category: 'logic',
103814
103735
  },
103815
103736
  ],
103816
- suggestions: [],
103817
103737
  };
103818
103738
  }
103819
103739
  }
103820
- // Return the processed data as suggestions for dependent checks to access
103821
- // We encode the data as JSON in a suggestion so it can be accessed via outputs
103740
+ // Return the processed data as a custom field for dependent checks to access
103741
+ // This will be available in outputs for dependent checks
103822
103742
  return {
103823
103743
  issues: [],
103824
- suggestions: [JSON.stringify(processedData)],
103744
+ // Add custom data field that will be passed through
103745
+ data: processedData,
103825
103746
  };
103826
103747
  }
103827
103748
  getWebhookData(endpoint) {
@@ -103917,9 +103838,14 @@ class LogCheckProvider extends check_provider_interface_1.CheckProvider {
103917
103838
  const renderedMessage = await this.liquid.parseAndRender(message, templateContext);
103918
103839
  // Build the log output
103919
103840
  const logOutput = this.formatLogOutput(level, renderedMessage, templateContext, includePrContext, includeDependencies, includeMetadata);
103841
+ // Output to console based on log level
103842
+ const logFn = level === 'error' ? console.error : level === 'warn' ? console.warn : console.log;
103843
+ logFn(logOutput);
103844
+ // Return with the log content as custom data for dependent checks
103920
103845
  return {
103921
- issues: [], // Log provider doesn't generate issues
103922
- suggestions: [logOutput], // Put formatted log output as the primary suggestion
103846
+ issues: [],
103847
+ // Add log output as custom field
103848
+ logOutput,
103923
103849
  };
103924
103850
  }
103925
103851
  buildTemplateContext(prInfo, dependencyResults, includePrContext = true, includeDependencies = true, includeMetadata = true) {
@@ -103952,9 +103878,8 @@ class LogCheckProvider extends check_provider_interface_1.CheckProvider {
103952
103878
  for (const [checkName, result] of dependencyResults.entries()) {
103953
103879
  dependencies[checkName] = {
103954
103880
  issueCount: result.issues?.length || 0,
103955
- suggestionCount: result.suggestions?.length || 0,
103881
+ suggestionCount: 0,
103956
103882
  issues: result.issues || [],
103957
- suggestions: result.suggestions || [],
103958
103883
  };
103959
103884
  }
103960
103885
  context.dependencies = dependencies;
@@ -104097,7 +104022,6 @@ class NoopCheckProvider extends check_provider_interface_1.CheckProvider {
104097
104022
  // It exists purely for command orchestration and dependency triggering
104098
104023
  return {
104099
104024
  issues: [],
104100
- suggestions: [],
104101
104025
  };
104102
104026
  }
104103
104027
  getSupportedConfigKeys() {
@@ -104219,7 +104143,6 @@ class ToolCheckProvider extends check_provider_interface_1.CheckProvider {
104219
104143
  const filteredIssues = issueFilter.filterIssues(issues, process.cwd());
104220
104144
  return {
104221
104145
  issues: filteredIssues,
104222
- suggestions: this.generateSuggestions(comments, renderedCommand),
104223
104146
  };
104224
104147
  }
104225
104148
  async executeCommand(command, stdin) {
@@ -104274,17 +104197,6 @@ class ToolCheckProvider extends check_provider_interface_1.CheckProvider {
104274
104197
  }
104275
104198
  return comments;
104276
104199
  }
104277
- generateSuggestions(comments, command) {
104278
- const suggestions = [];
104279
- if (comments.length > 0) {
104280
- suggestions.push(`Fix ${comments.length} issues found by ${command}`);
104281
- const errorCount = comments.filter(c => c.severity === 'error').length;
104282
- if (errorCount > 0) {
104283
- suggestions.push(`Priority: Fix ${errorCount} errors before merging`);
104284
- }
104285
- }
104286
- return suggestions;
104287
- }
104288
104200
  getSupportedConfigKeys() {
104289
104201
  return ['type', 'exec', 'command', 'stdin', 'timeout', 'workingDirectory'];
104290
104202
  }
@@ -104355,7 +104267,7 @@ const ai_review_service_1 = __nccwpck_require__(51796);
104355
104267
  // Test utility function - Convert old ReviewSummary to new GroupedCheckResults format
104356
104268
  // This is for backward compatibility with tests only
104357
104269
  function convertReviewSummaryToGroupedResults(reviewSummary, checkName = 'test-check', groupName = 'default') {
104358
- // Create a simple content string from issues and suggestions
104270
+ // Create a simple content string from issues
104359
104271
  let content = '';
104360
104272
  if (reviewSummary.issues && reviewSummary.issues.length > 0) {
104361
104273
  content += `## Issues Found (${reviewSummary.issues.length})\n\n`;
@@ -104364,12 +104276,6 @@ function convertReviewSummaryToGroupedResults(reviewSummary, checkName = 'test-c
104364
104276
  });
104365
104277
  content += '\n';
104366
104278
  }
104367
- if (reviewSummary.suggestions && reviewSummary.suggestions.length > 0) {
104368
- content += `## Suggestions\n\n`;
104369
- reviewSummary.suggestions.forEach(suggestion => {
104370
- content += `- ${suggestion}\n`;
104371
- });
104372
- }
104373
104279
  if (!content) {
104374
104280
  content = 'No issues found.';
104375
104281
  }
@@ -1 +1 @@
1
- {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/output-formatters.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EAMd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,iBAAiB,CAAC;IAClC,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,iBAAiB,CAAC,EAAE,sBAAsB,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,sBAA2B,GAAG,MAAM;IA+L1F;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,sBAA2B,GAAG,MAAM;IAqCzF;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,GAAE,sBAA2B,GAAG,MAAM;IAmI3F;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,sBAA2B,GAAG,MAAM;IAiO7F,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAqBtC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAc7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAsBpC,OAAO,CAAC,MAAM,CAAC,cAAc;IAU7B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAUjC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAU/B,OAAO,CAAC,MAAM,CAAC,YAAY;IAK3B,OAAO,CAAC,MAAM,CAAC,QAAQ;CAmBxB"}
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/output-formatters.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EAMd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,iBAAiB,CAAC;IAClC,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,iBAAiB,CAAC,EAAE,sBAAsB,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,sBAA2B,GAAG,MAAM;IA2K1F;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,sBAA2B,GAAG,MAAM;IAoCzF;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,GAAE,sBAA2B,GAAG,MAAM;IAmI3F;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,sBAA2B,GAAG,MAAM;IAuN7F,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAqBtC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAc7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAsBpC,OAAO,CAAC,MAAM,CAAC,cAAc;IAU7B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAUjC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAU/B,OAAO,CAAC,MAAM,CAAC,YAAY;IAK3B,OAAO,CAAC,MAAM,CAAC,QAAQ;CAmBxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ai-check-provider.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/ai-check-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAU5C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAS;;IAQ7B,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAkDvD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;YACW,aAAa;IAmB3B;;OAEG;YACW,UAAU;IAsExB;;OAEG;YACW,kBAAkB;IA0ChC;;OAEG;YACW,oBAAoB;IA+JlC;;OAEG;YACW,aAAa;IA8DrB,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC/C,WAAW,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GACjE,OAAO,CAAC,aAAa,CAAC;YAiBX,iBAAiB;IA2K/B,sBAAsB,IAAI,MAAM,EAAE;IAmB5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC,eAAe,IAAI,MAAM,EAAE;CAO5B"}
1
+ {"version":3,"file":"ai-check-provider.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/ai-check-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAU5C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAS;;IAQ7B,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAkDvD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;YACW,aAAa;IAmB3B;;OAEG;YACW,UAAU;IAsExB;;OAEG;YACW,kBAAkB;IA0ChC;;OAEG;YACW,oBAAoB;IA8JlC;;OAEG;YACW,aAAa;IA8DrB,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC/C,WAAW,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GACjE,OAAO,CAAC,aAAa,CAAC;YAiBX,iBAAiB;IA2K/B,sBAAsB,IAAI,MAAM,EAAE;IAmB5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC,eAAe,IAAI,MAAM,EAAE;CAO5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code-check-provider.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/claude-code-check-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAc5C;;GAEG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;;CAOxD;AAED;;GAEG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;;CAOtD;AAED;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,aAAa;IACxD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,gBAAgB,CAAiC;;IAOzD,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAwDvD;;OAEG;YACW,0BAA0B;IAyCxC;;OAEG;YACW,aAAa;IAqE3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;YACW,aAAa;IAmB3B;;OAEG;YACW,UAAU;IAkExB;;OAEG;YACW,kBAAkB;IA0ChC;;OAEG;YACW,oBAAoB;IA+HlC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmBzB,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC9C,WAAW,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GACjE,OAAO,CAAC,aAAa,CAAC;YAgBX,iBAAiB;IA8H/B,sBAAsB,IAAI,MAAM,EAAE;IAiB5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IA0BrC,eAAe,IAAI,MAAM,EAAE;CAQ5B"}
1
+ {"version":3,"file":"claude-code-check-provider.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/claude-code-check-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAc5C;;GAEG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;;CAOxD;AAED;;GAEG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;;CAOtD;AAED;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,aAAa;IACxD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,gBAAgB,CAAiC;;IAOzD,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAwDvD;;OAEG;YACW,0BAA0B;IAyCxC;;OAEG;YACW,aAAa;IAqE3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;YACW,aAAa;IAmB3B;;OAEG;YACW,UAAU;IAkExB;;OAEG;YACW,kBAAkB;IA0ChC;;OAEG;YACW,oBAAoB;IA8HlC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiBzB,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC9C,WAAW,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GACjE,OAAO,CAAC,aAAa,CAAC;YAgBX,iBAAiB;IA8H/B,sBAAsB,IAAI,MAAM,EAAE;IAiB5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IA0BrC,eAAe,IAAI,MAAM,EAAE;CAQ5B"}