@probelabs/visor 0.1.72 → 0.1.73

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
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- process.env.VISOR_VERSION = '0.1.72';
3
- process.env.PROBE_VERSION = '0.6.0-rc116';
2
+ process.env.VISOR_VERSION = '0.1.73';
3
+ process.env.PROBE_VERSION = '0.6.0-rc117';
4
4
  /******/ (() => { // webpackBootstrap
5
5
  /******/ var __webpack_modules__ = ({
6
6
 
@@ -95099,6 +95099,7 @@ class CheckExecutionEngine {
95099
95099
  config;
95100
95100
  webhookContext;
95101
95101
  routingSandbox;
95102
+ executionStats = new Map();
95102
95103
  constructor(workingDirectory) {
95103
95104
  this.workingDirectory = workingDirectory || process.cwd();
95104
95105
  this.gitAnalyzer = new git_repository_analyzer_1.GitRepositoryAnalyzer(this.workingDirectory);
@@ -95660,12 +95661,15 @@ class CheckExecutionEngine {
95660
95661
  apiCallDetails: reviewSummary.debug.apiCallDetails,
95661
95662
  };
95662
95663
  }
95664
+ // Build execution statistics
95665
+ const executionStatistics = this.buildExecutionStatistics();
95663
95666
  return {
95664
95667
  repositoryInfo,
95665
95668
  reviewSummary,
95666
95669
  executionTime,
95667
95670
  timestamp,
95668
95671
  checksExecuted: filteredChecks,
95672
+ executionStatistics,
95669
95673
  debug: debugInfo,
95670
95674
  };
95671
95675
  }
@@ -95861,7 +95865,7 @@ class CheckExecutionEngine {
95861
95865
  });
95862
95866
  }
95863
95867
  /**
95864
- * Execute review checks and return grouped results for new architecture
95868
+ * Execute review checks and return grouped results with statistics for new architecture
95865
95869
  */
95866
95870
  async executeGroupedChecks(prInfo, checks, timeout, config, outputFormat, debug, maxParallelism, failFast, tagFilter) {
95867
95871
  // Determine where to send log messages based on output format
@@ -95890,7 +95894,10 @@ class CheckExecutionEngine {
95890
95894
  // Check if we have any checks left after filtering
95891
95895
  if (checks.length === 0) {
95892
95896
  logger_1.logger.warn('⚠️ No checks remain after tag filtering');
95893
- return {};
95897
+ return {
95898
+ results: {},
95899
+ statistics: this.buildExecutionStatistics(),
95900
+ };
95894
95901
  }
95895
95902
  if (!config?.checks) {
95896
95903
  throw new Error('Config with check definitions required for grouped execution');
@@ -95914,10 +95921,16 @@ class CheckExecutionEngine {
95914
95921
  const checkResult = await this.executeSingleGroupedCheck(prInfo, checks[0], timeout, config, logFn, debug);
95915
95922
  const groupedResults = {};
95916
95923
  groupedResults[checkResult.group] = [checkResult];
95917
- return groupedResults;
95924
+ return {
95925
+ results: groupedResults,
95926
+ statistics: this.buildExecutionStatistics(),
95927
+ };
95918
95928
  }
95919
95929
  // No checks to execute
95920
- return {};
95930
+ return {
95931
+ results: {},
95932
+ statistics: this.buildExecutionStatistics(),
95933
+ };
95921
95934
  }
95922
95935
  /**
95923
95936
  * Execute single check and return grouped result
@@ -95962,13 +95975,19 @@ class CheckExecutionEngine {
95962
95975
  };
95963
95976
  }
95964
95977
  /**
95965
- * Execute multiple checks with dependency awareness - return grouped results
95978
+ * Execute multiple checks with dependency awareness - return grouped results with statistics
95966
95979
  */
95967
95980
  async executeGroupedDependencyAwareChecks(prInfo, checks, timeout, config, logFn, debug, maxParallelism, failFast) {
95968
95981
  // Use the existing dependency-aware execution logic
95969
95982
  const reviewSummary = await this.executeDependencyAwareChecks(prInfo, checks, timeout, config, logFn, debug, maxParallelism, failFast);
95983
+ // Build execution statistics
95984
+ const executionStatistics = this.buildExecutionStatistics();
95970
95985
  // Convert the flat ReviewSummary to grouped CheckResults
95971
- return await this.convertReviewSummaryToGroupedResults(reviewSummary, checks, config, prInfo);
95986
+ const groupedResults = await this.convertReviewSummaryToGroupedResults(reviewSummary, checks, config, prInfo);
95987
+ return {
95988
+ results: groupedResults,
95989
+ statistics: executionStatistics,
95990
+ };
95972
95991
  }
95973
95992
  /**
95974
95993
  * Convert ReviewSummary to GroupedCheckResults
@@ -96281,9 +96300,10 @@ class CheckExecutionEngine {
96281
96300
  let shouldStopExecution = false;
96282
96301
  let completedChecksCount = 0;
96283
96302
  const totalChecksCount = stats.totalChecks;
96284
- let skippedChecksCount = 0;
96285
- let failedChecksCount = 0;
96286
- const executionStartTime = Date.now();
96303
+ // Initialize execution statistics for all checks
96304
+ for (const checkName of checks) {
96305
+ this.initializeCheckStats(checkName);
96306
+ }
96287
96307
  for (let levelIndex = 0; levelIndex < dependencyGraph.executionOrder.length && !shouldStopExecution; levelIndex++) {
96288
96308
  const executionGroup = dependencyGraph.executionOrder[levelIndex];
96289
96309
  // Check if any checks in this level require session reuse - if so, force sequential execution
@@ -96416,9 +96436,13 @@ class CheckExecutionEngine {
96416
96436
  // Handle forEach dependent execution
96417
96437
  let finalResult;
96418
96438
  if (isForEachDependent && forEachParentName) {
96439
+ // Record forEach preview items
96440
+ this.recordForEachPreview(checkName, forEachItems);
96419
96441
  if (debug) {
96420
96442
  log(`🔄 Debug: Check "${checkName}" depends on forEach check "${forEachParentName}", executing ${forEachItems.length} times`);
96421
96443
  }
96444
+ // Log forEach processing start
96445
+ logger_1.logger.info(` Processing ${forEachItems.length} items...`);
96422
96446
  const allIssues = [];
96423
96447
  const allOutputs = [];
96424
96448
  const aggregatedContents = [];
@@ -96479,6 +96503,8 @@ class CheckExecutionEngine {
96479
96503
  if (debug) {
96480
96504
  log(`🔄 Debug: Executing check "${checkName}" for item ${itemIndex + 1}/${forEachItems.length}`);
96481
96505
  }
96506
+ // Track iteration start
96507
+ const iterationStart = this.recordIterationStart(checkName);
96482
96508
  // Execute with retry/routing semantics per item
96483
96509
  const itemResult = await this.executeWithRouting(checkName, checkConfig, provider, providerConfig, prInfo, forEachDependencyResults, sessionInfo, config, dependencyGraph, debug, results,
96484
96510
  /*foreachContext*/ {
@@ -96486,6 +96512,11 @@ class CheckExecutionEngine {
96486
96512
  total: forEachItems.length,
96487
96513
  parent: forEachParentName,
96488
96514
  });
96515
+ // Record iteration completion
96516
+ const iterationDuration = (Date.now() - iterationStart) / 1000;
96517
+ this.recordIterationComplete(checkName, iterationStart, true, itemResult.issues || [], itemResult.output);
96518
+ // Log iteration progress
96519
+ logger_1.logger.info(` ✔ ${itemIndex + 1}/${forEachItems.length} (${iterationDuration.toFixed(1)}s)`);
96489
96520
  return { index: itemIndex, itemResult };
96490
96521
  });
96491
96522
  const forEachConcurrency = Math.max(1, Math.min(forEachItems.length, effectiveMaxParallelism));
@@ -96537,8 +96568,9 @@ class CheckExecutionEngine {
96537
96568
  if (checkConfig.if) {
96538
96569
  const shouldRun = await this.evaluateCheckCondition(checkName, checkConfig.if, prInfo, results, debug);
96539
96570
  if (!shouldRun) {
96540
- skippedChecksCount++;
96541
- logger_1.logger.info(`⏭ Skipping check: ${checkName} (if condition evaluated to false)`);
96571
+ // Record skip with condition
96572
+ this.recordSkip(checkName, 'if_condition', checkConfig.if);
96573
+ logger_1.logger.info(`⏭ Skipped (if: ${this.truncate(checkConfig.if, 40)})`);
96542
96574
  return {
96543
96575
  checkName,
96544
96576
  error: null,
@@ -96551,6 +96583,8 @@ class CheckExecutionEngine {
96551
96583
  }
96552
96584
  // Execute with retry/routing semantics
96553
96585
  finalResult = await this.executeWithRouting(checkName, checkConfig, provider, providerConfig, prInfo, dependencyResults, sessionInfo, config, dependencyGraph, debug, results);
96586
+ // Record normal (non-forEach) execution
96587
+ this.recordIterationComplete(checkName, checkStartTime, true, finalResult.issues || [], finalResult.output);
96554
96588
  if (checkConfig.forEach) {
96555
96589
  try {
96556
96590
  const finalResultWithOutput = finalResult;
@@ -96581,7 +96615,20 @@ class CheckExecutionEngine {
96581
96615
  };
96582
96616
  const checkDuration = ((Date.now() - checkStartTime) / 1000).toFixed(1);
96583
96617
  const issueCount = enrichedIssues.length;
96584
- if (issueCount > 0) {
96618
+ const checkStats = this.executionStats.get(checkName);
96619
+ // Enhanced completion message with forEach stats
96620
+ if (checkStats && checkStats.totalRuns > 1) {
96621
+ if (issueCount > 0) {
96622
+ logger_1.logger.success(`Check complete: ${checkName} (${checkDuration}s) - ${checkStats.totalRuns} runs, ${issueCount} issue${issueCount === 1 ? '' : 's'}`);
96623
+ }
96624
+ else {
96625
+ logger_1.logger.success(`Check complete: ${checkName} (${checkDuration}s) - ${checkStats.totalRuns} runs`);
96626
+ }
96627
+ }
96628
+ else if (checkStats && checkStats.outputsProduced && checkStats.outputsProduced > 0) {
96629
+ logger_1.logger.success(`Check complete: ${checkName} (${checkDuration}s) - ${checkStats.outputsProduced} items`);
96630
+ }
96631
+ else if (issueCount > 0) {
96585
96632
  logger_1.logger.success(`Check complete: ${checkName} (${checkDuration}s) - ${issueCount} issue${issueCount === 1 ? '' : 's'} found`);
96586
96633
  }
96587
96634
  else {
@@ -96594,9 +96641,11 @@ class CheckExecutionEngine {
96594
96641
  };
96595
96642
  }
96596
96643
  catch (error) {
96597
- failedChecksCount++;
96598
96644
  const errorMessage = error instanceof Error ? error.message : String(error);
96599
96645
  const checkDuration = ((Date.now() - checkStartTime) / 1000).toFixed(1);
96646
+ // Record error in stats
96647
+ this.recordError(checkName, error instanceof Error ? error : new Error(String(error)));
96648
+ this.recordIterationComplete(checkName, checkStartTime, false, [], undefined);
96600
96649
  logger_1.logger.error(`✖ Check failed: ${checkName} (${checkDuration}s) - ${errorMessage}`);
96601
96650
  if (debug) {
96602
96651
  log(`🔧 Debug: Error in check ${checkName}: ${errorMessage}`);
@@ -96714,20 +96763,18 @@ class CheckExecutionEngine {
96714
96763
  }
96715
96764
  }
96716
96765
  }
96717
- // Log final execution summary
96718
- const executionDuration = ((Date.now() - executionStartTime) / 1000).toFixed(1);
96719
- const successfulChecks = totalChecksCount - failedChecksCount - skippedChecksCount;
96720
- logger_1.logger.info('');
96721
- logger_1.logger.step(`Execution complete (${executionDuration}s)`);
96722
- logger_1.logger.info(` ✔ Successful: ${successfulChecks}/${totalChecksCount}`);
96723
- if (skippedChecksCount > 0) {
96724
- logger_1.logger.info(` ⏭ Skipped: ${skippedChecksCount}`);
96725
- }
96726
- if (failedChecksCount > 0) {
96727
- logger_1.logger.info(` ✖ Failed: ${failedChecksCount}`);
96766
+ // Build and log final execution summary
96767
+ const executionStatistics = this.buildExecutionStatistics();
96768
+ // Show detailed summary table (only if logFn outputs to console)
96769
+ // Skip when output format is JSON/SARIF to avoid polluting structured output
96770
+ // Check if logFn is console.log (not a no-op or console.error)
96771
+ if (logFn === console.log) {
96772
+ this.logExecutionSummary(executionStatistics);
96728
96773
  }
96774
+ // Add warning if execution stopped early
96729
96775
  if (shouldStopExecution) {
96730
- logger_1.logger.warn(` ⚠️ Execution stopped early due to fail-fast`);
96776
+ logger_1.logger.info('');
96777
+ logger_1.logger.warn(`⚠️ Execution stopped early due to fail-fast`);
96731
96778
  }
96732
96779
  if (debug) {
96733
96780
  if (shouldStopExecution) {
@@ -97666,6 +97713,251 @@ class CheckExecutionEngine {
97666
97713
  // events, which don't generate PRInfo objects in the first place.
97667
97714
  return 'pr_updated';
97668
97715
  }
97716
+ /**
97717
+ * Initialize execution statistics for a check
97718
+ */
97719
+ initializeCheckStats(checkName) {
97720
+ this.executionStats.set(checkName, {
97721
+ checkName,
97722
+ totalRuns: 0,
97723
+ successfulRuns: 0,
97724
+ failedRuns: 0,
97725
+ skipped: false,
97726
+ totalDuration: 0,
97727
+ issuesFound: 0,
97728
+ issuesBySeverity: {
97729
+ critical: 0,
97730
+ error: 0,
97731
+ warning: 0,
97732
+ info: 0,
97733
+ },
97734
+ perIterationDuration: [],
97735
+ });
97736
+ }
97737
+ /**
97738
+ * Record the start of a check iteration
97739
+ * Returns the start timestamp for duration tracking
97740
+ */
97741
+ recordIterationStart(_checkName) {
97742
+ return Date.now();
97743
+ }
97744
+ /**
97745
+ * Record completion of a check iteration
97746
+ */
97747
+ recordIterationComplete(checkName, startTime, success, issues, output) {
97748
+ const stats = this.executionStats.get(checkName);
97749
+ if (!stats)
97750
+ return;
97751
+ const duration = Date.now() - startTime;
97752
+ stats.totalRuns++;
97753
+ if (success) {
97754
+ stats.successfulRuns++;
97755
+ }
97756
+ else {
97757
+ stats.failedRuns++;
97758
+ }
97759
+ stats.totalDuration += duration;
97760
+ stats.perIterationDuration.push(duration);
97761
+ // Count issues by severity
97762
+ for (const issue of issues) {
97763
+ stats.issuesFound++;
97764
+ if (issue.severity === 'critical')
97765
+ stats.issuesBySeverity.critical++;
97766
+ else if (issue.severity === 'error')
97767
+ stats.issuesBySeverity.error++;
97768
+ else if (issue.severity === 'warning')
97769
+ stats.issuesBySeverity.warning++;
97770
+ else if (issue.severity === 'info')
97771
+ stats.issuesBySeverity.info++;
97772
+ }
97773
+ // Track outputs produced
97774
+ if (output !== undefined) {
97775
+ stats.outputsProduced = (stats.outputsProduced || 0) + 1;
97776
+ }
97777
+ }
97778
+ /**
97779
+ * Record that a check was skipped
97780
+ */
97781
+ recordSkip(checkName, reason, condition) {
97782
+ const stats = this.executionStats.get(checkName);
97783
+ if (!stats)
97784
+ return;
97785
+ stats.skipped = true;
97786
+ stats.skipReason = reason;
97787
+ if (condition) {
97788
+ stats.skipCondition = condition;
97789
+ }
97790
+ }
97791
+ /**
97792
+ * Record forEach preview items
97793
+ */
97794
+ recordForEachPreview(checkName, items) {
97795
+ const stats = this.executionStats.get(checkName);
97796
+ if (!stats || !items.length)
97797
+ return;
97798
+ // Store preview of first 3 items
97799
+ const preview = items.slice(0, 3).map(item => {
97800
+ const str = typeof item === 'string' ? item : JSON.stringify(item);
97801
+ return str.length > 50 ? str.substring(0, 47) + '...' : str;
97802
+ });
97803
+ if (items.length > 3) {
97804
+ preview.push(`...${items.length - 3} more`);
97805
+ }
97806
+ stats.forEachPreview = preview;
97807
+ }
97808
+ /**
97809
+ * Record an error for a check
97810
+ */
97811
+ recordError(checkName, error) {
97812
+ const stats = this.executionStats.get(checkName);
97813
+ if (!stats)
97814
+ return;
97815
+ stats.errorMessage = error instanceof Error ? error.message : String(error);
97816
+ }
97817
+ /**
97818
+ * Build the final execution statistics object
97819
+ */
97820
+ buildExecutionStatistics() {
97821
+ const checks = Array.from(this.executionStats.values());
97822
+ const totalExecutions = checks.reduce((sum, s) => sum + s.totalRuns, 0);
97823
+ const successfulExecutions = checks.reduce((sum, s) => sum + s.successfulRuns, 0);
97824
+ const failedExecutions = checks.reduce((sum, s) => sum + s.failedRuns, 0);
97825
+ const skippedChecks = checks.filter(s => s.skipped).length;
97826
+ const totalDuration = checks.reduce((sum, s) => sum + s.totalDuration, 0);
97827
+ return {
97828
+ totalChecksConfigured: checks.length,
97829
+ totalExecutions,
97830
+ successfulExecutions,
97831
+ failedExecutions,
97832
+ skippedChecks,
97833
+ totalDuration,
97834
+ checks,
97835
+ };
97836
+ }
97837
+ /**
97838
+ * Truncate a string to max length with ellipsis
97839
+ */
97840
+ truncate(str, maxLen) {
97841
+ if (str.length <= maxLen)
97842
+ return str;
97843
+ return str.substring(0, maxLen - 3) + '...';
97844
+ }
97845
+ /**
97846
+ * Format the Status column for execution summary table
97847
+ */
97848
+ formatStatusColumn(stats) {
97849
+ if (stats.skipped) {
97850
+ if (stats.skipReason === 'if_condition')
97851
+ return '⏭ if';
97852
+ if (stats.skipReason === 'fail_fast')
97853
+ return '⏭ ff';
97854
+ if (stats.skipReason === 'dependency_failed')
97855
+ return '⏭ dep';
97856
+ return '⏭';
97857
+ }
97858
+ if (stats.totalRuns === 0)
97859
+ return '-';
97860
+ const symbol = stats.failedRuns === 0 ? '✔' : stats.successfulRuns === 0 ? '✖' : '✔/✖';
97861
+ // Show iteration count if > 1
97862
+ if (stats.totalRuns > 1) {
97863
+ if (stats.failedRuns > 0 && stats.successfulRuns > 0) {
97864
+ // Partial success
97865
+ return `${symbol} ${stats.successfulRuns}/${stats.totalRuns}`;
97866
+ }
97867
+ else {
97868
+ // All success or all failed
97869
+ return `${symbol} ×${stats.totalRuns}`;
97870
+ }
97871
+ }
97872
+ return symbol;
97873
+ }
97874
+ /**
97875
+ * Format the Details column for execution summary table
97876
+ */
97877
+ formatDetailsColumn(stats) {
97878
+ const parts = [];
97879
+ // Outputs produced (forEach)
97880
+ if (stats.outputsProduced && stats.outputsProduced > 0) {
97881
+ parts.push(`→${stats.outputsProduced}`);
97882
+ }
97883
+ // Critical issues
97884
+ if (stats.issuesBySeverity.critical > 0) {
97885
+ parts.push(`${stats.issuesBySeverity.critical}🔴`);
97886
+ }
97887
+ // Warnings
97888
+ if (stats.issuesBySeverity.warning > 0) {
97889
+ parts.push(`${stats.issuesBySeverity.warning}⚠️`);
97890
+ }
97891
+ // Info (only if no critical/warnings)
97892
+ if (stats.issuesBySeverity.info > 0 &&
97893
+ stats.issuesBySeverity.critical === 0 &&
97894
+ stats.issuesBySeverity.warning === 0) {
97895
+ parts.push(`${stats.issuesBySeverity.info}💡`);
97896
+ }
97897
+ // Error message or skip condition
97898
+ if (stats.errorMessage) {
97899
+ parts.push(this.truncate(stats.errorMessage, 20));
97900
+ }
97901
+ else if (stats.skipCondition) {
97902
+ parts.push(this.truncate(stats.skipCondition, 20));
97903
+ }
97904
+ return parts.join(' ');
97905
+ }
97906
+ /**
97907
+ * Log the execution summary table
97908
+ */
97909
+ logExecutionSummary(stats) {
97910
+ const totalIssues = stats.checks.reduce((sum, s) => sum + s.issuesFound, 0);
97911
+ const criticalIssues = stats.checks.reduce((sum, s) => sum + s.issuesBySeverity.critical, 0);
97912
+ const warningIssues = stats.checks.reduce((sum, s) => sum + s.issuesBySeverity.warning, 0);
97913
+ const durationSec = (stats.totalDuration / 1000).toFixed(1);
97914
+ // Summary box
97915
+ const summaryTable = new (__nccwpck_require__(25832))({
97916
+ style: {
97917
+ head: [],
97918
+ border: [],
97919
+ },
97920
+ colWidths: [41],
97921
+ });
97922
+ summaryTable.push([`Execution Complete (${durationSec}s)`], [`Checks: ${stats.totalChecksConfigured} configured → ${stats.totalExecutions} executions`], [
97923
+ `Status: ${stats.successfulExecutions} ✔ │ ${stats.failedExecutions} ✖ │ ${stats.skippedChecks} ⏭`,
97924
+ ]);
97925
+ if (totalIssues > 0) {
97926
+ let issuesLine = `Issues: ${totalIssues} total`;
97927
+ if (criticalIssues > 0)
97928
+ issuesLine += ` (${criticalIssues} 🔴`;
97929
+ if (warningIssues > 0)
97930
+ issuesLine += `${criticalIssues > 0 ? ' ' : ' ('}${warningIssues} ⚠️)`;
97931
+ else if (criticalIssues > 0)
97932
+ issuesLine += ')';
97933
+ summaryTable.push([issuesLine]);
97934
+ }
97935
+ logger_1.logger.info('');
97936
+ logger_1.logger.info(summaryTable.toString());
97937
+ // Details table
97938
+ logger_1.logger.info('');
97939
+ logger_1.logger.info('Check Details:');
97940
+ const detailsTable = new (__nccwpck_require__(25832))({
97941
+ head: ['Check', 'Duration', 'Status', 'Details'],
97942
+ colWidths: [21, 10, 10, 21],
97943
+ style: {
97944
+ head: ['cyan'],
97945
+ border: ['grey'],
97946
+ },
97947
+ });
97948
+ for (const checkStats of stats.checks) {
97949
+ const duration = checkStats.skipped
97950
+ ? '-'
97951
+ : `${(checkStats.totalDuration / 1000).toFixed(1)}s`;
97952
+ const status = this.formatStatusColumn(checkStats);
97953
+ const details = this.formatDetailsColumn(checkStats);
97954
+ detailsTable.push([checkStats.checkName, duration, status, details]);
97955
+ }
97956
+ logger_1.logger.info(detailsTable.toString());
97957
+ // Legend
97958
+ logger_1.logger.info('');
97959
+ logger_1.logger.info('Legend: ✔=success │ ✖=failed │ ⏭=skipped │ ×N=iterations │ →N=outputs │ N🔴=critical │ N⚠️=warnings');
97960
+ }
97669
97961
  }
97670
97962
  exports.CheckExecutionEngine = CheckExecutionEngine;
97671
97963
 
@@ -97752,7 +98044,15 @@ async function main() {
97752
98044
  console.log(cli.getVersion());
97753
98045
  process.exit(0);
97754
98046
  }
98047
+ // Configure logger based on output format and verbosity
98048
+ logger_1.logger.configure({
98049
+ outputFormat: options.output,
98050
+ debug: options.debug,
98051
+ verbose: options.verbose,
98052
+ quiet: options.quiet,
98053
+ });
97755
98054
  // Print runtime banner (info level): Visor + Probe versions
98055
+ // Banner is automatically suppressed for JSON/SARIF by logger configuration
97756
98056
  try {
97757
98057
  const visorVersion = process.env.VISOR_VERSION || ((__nccwpck_require__(8330)/* .version */ .rE) ?? 'dev');
97758
98058
  let probeVersion = process.env.PROBE_VERSION || 'unknown';
@@ -97920,7 +98220,9 @@ async function main() {
97920
98220
  const prInfoWithContext = prInfo;
97921
98221
  prInfoWithContext.includeCodeContext = includeCodeContext;
97922
98222
  // Execute checks with proper parameters
97923
- const groupedResults = await engine.executeGroupedChecks(prInfo, checksToRun, options.timeout, config, options.output, options.debug || false, options.maxParallelism, options.failFast, tagFilter);
98223
+ const executionResult = await engine.executeGroupedChecks(prInfo, checksToRun, options.timeout, config, options.output, options.debug || false, options.maxParallelism, options.failFast, tagFilter);
98224
+ // Extract results and statistics from the execution result
98225
+ const { results: groupedResults, statistics: executionStatistics } = executionResult;
97924
98226
  const shouldFilterResults = explicitChecks && explicitChecks.size > 0 && !explicitChecks.has('all');
97925
98227
  const groupedResultsToUse = shouldFilterResults
97926
98228
  ? Object.fromEntries(Object.entries(groupedResults)
@@ -97945,7 +98247,8 @@ async function main() {
97945
98247
  }
97946
98248
  }
97947
98249
  }
97948
- const executedCheckNames = Array.from(new Set(Object.values(groupedResultsToUse).flatMap((checks) => checks.map(check => check.checkName))));
98250
+ // Get executed check names
98251
+ const executedCheckNames = Array.from(new Set(Object.entries(groupedResultsToUse).flatMap(([, checks]) => checks.map(check => check.checkName))));
97949
98252
  // Format output based on format type
97950
98253
  logger_1.logger.step(`Formatting results as ${options.output}`);
97951
98254
  let output;
@@ -97958,12 +98261,14 @@ async function main() {
97958
98261
  repositoryInfo,
97959
98262
  reviewSummary: {
97960
98263
  issues: Object.values(groupedResultsToUse)
97961
- .flatMap((r) => r.map((check) => check.issues || []).flat())
98264
+ .flatMap(checks => checks.flatMap(check => check.issues || []))
97962
98265
  .flat(),
97963
98266
  },
97964
98267
  executionTime: 0,
97965
98268
  timestamp: new Date().toISOString(),
97966
98269
  checksExecuted: executedCheckNames,
98270
+ executionStatistics,
98271
+ isCodeReview: includeCodeContext,
97967
98272
  };
97968
98273
  output = output_formatters_1.OutputFormatters.formatAsSarif(analysisResult);
97969
98274
  }
@@ -97973,12 +98278,14 @@ async function main() {
97973
98278
  repositoryInfo,
97974
98279
  reviewSummary: {
97975
98280
  issues: Object.values(groupedResultsToUse)
97976
- .flatMap((r) => r.map((check) => check.issues || []).flat())
98281
+ .flatMap(checks => checks.flatMap(check => check.issues || []))
97977
98282
  .flat(),
97978
98283
  },
97979
98284
  executionTime: 0,
97980
98285
  timestamp: new Date().toISOString(),
97981
98286
  checksExecuted: executedCheckNames,
98287
+ executionStatistics,
98288
+ isCodeReview: includeCodeContext,
97982
98289
  };
97983
98290
  output = output_formatters_1.OutputFormatters.formatAsMarkdown(analysisResult);
97984
98291
  }
@@ -97988,12 +98295,14 @@ async function main() {
97988
98295
  repositoryInfo,
97989
98296
  reviewSummary: {
97990
98297
  issues: Object.values(groupedResultsToUse)
97991
- .flatMap((r) => r.map((check) => check.issues || []).flat())
98298
+ .flatMap(checks => checks.flatMap(check => check.issues || []))
97992
98299
  .flat(),
97993
98300
  },
97994
98301
  executionTime: 0,
97995
98302
  timestamp: new Date().toISOString(),
97996
98303
  checksExecuted: executedCheckNames,
98304
+ executionStatistics,
98305
+ isCodeReview: includeCodeContext,
97997
98306
  };
97998
98307
  output = output_formatters_1.OutputFormatters.formatAsTable(analysisResult, { showDetails: true });
97999
98308
  }
@@ -98014,7 +98323,7 @@ async function main() {
98014
98323
  console.log(output);
98015
98324
  }
98016
98325
  // Summarize execution (stderr only; suppressed in JSON/SARIF unless verbose/debug)
98017
- const allResults = Object.values(groupedResultsToUse).flat();
98326
+ const allResults = Object.values(groupedResultsToUse).flatMap(checks => checks);
98018
98327
  const allIssues = allResults.flatMap((r) => r.issues || []);
98019
98328
  const counts = allIssues.reduce((acc, issue) => {
98020
98329
  const sev = (issue.severity || 'info').toLowerCase();
@@ -101537,14 +101846,15 @@ async function handleIssueEvent(octokit, owner, repo, context, inputs, config, c
101537
101846
  const { CheckExecutionEngine } = await Promise.resolve().then(() => __importStar(__nccwpck_require__(80299)));
101538
101847
  const engine = new CheckExecutionEngine();
101539
101848
  try {
101540
- const result = await engine.executeGroupedChecks(prInfo, checksToRun, undefined, // timeout
101849
+ const executionResult = await engine.executeGroupedChecks(prInfo, checksToRun, undefined, // timeout
101541
101850
  config, undefined, // outputFormat
101542
101851
  inputs.debug === 'true');
101852
+ const { results } = executionResult;
101543
101853
  // Format and post results as a comment on the issue
101544
- if (Object.keys(result).length > 0) {
101854
+ if (Object.keys(results).length > 0) {
101545
101855
  let commentBody = '';
101546
101856
  // Directly use check content without adding extra headers
101547
- for (const checks of Object.values(result)) {
101857
+ for (const checks of Object.values(results)) {
101548
101858
  for (const check of checks) {
101549
101859
  if (check.content && check.content.trim()) {
101550
101860
  commentBody += `${check.content}\n\n`;
@@ -101803,7 +102113,7 @@ async function handleIssueComment(octokit, owner, repo, context, inputs, actionC
101803
102113
  console.log('📝 Skipping comment (comment-on-pr is disabled)');
101804
102114
  }
101805
102115
  // Calculate total check results from grouped results
101806
- const totalChecks = Object.values(groupedResults).flat().length;
102116
+ const totalChecks = Object.values(groupedResults).flatMap(checks => checks).length;
101807
102117
  (0, core_1.setOutput)('checks-executed', totalChecks.toString());
101808
102118
  }
101809
102119
  break;
@@ -102123,7 +102433,7 @@ async function completeGitHubChecks(octokit, owner, repo, checkRunMap, groupedRe
102123
102433
  */
102124
102434
  function extractIssuesFromGroupedResults(groupedResults) {
102125
102435
  const issues = [];
102126
- for (const [groupName, checkResults] of Object.entries(groupedResults)) {
102436
+ for (const checkResults of Object.values(groupedResults)) {
102127
102437
  for (const checkResult of checkResults) {
102128
102438
  const { checkName, content } = checkResult;
102129
102439
  // First, check if structured issues are available
@@ -102152,7 +102462,7 @@ function extractIssuesFromGroupedResults(groupedResults) {
102152
102462
  message: message.trim(),
102153
102463
  severity,
102154
102464
  category: 'logic', // Default category since we can't parse this from content
102155
- group: groupName,
102465
+ group: checkResult.group,
102156
102466
  timestamp: Date.now(),
102157
102467
  };
102158
102468
  issues.push(issue);
@@ -102716,19 +103026,35 @@ class OutputFormatters {
102716
103026
  const issues = result.reviewSummary.issues || [];
102717
103027
  const totalIssues = issues.length;
102718
103028
  const criticalIssues = issues.filter(i => i.severity === 'critical').length;
102719
- // Summary table
102720
- const summaryTable = new cli_table3_1.default({
102721
- head: ['Metric', 'Value'],
102722
- colWidths: [25, 30],
102723
- style: {
102724
- head: ['cyan', 'bold'],
102725
- border: ['grey'],
102726
- },
102727
- });
102728
- summaryTable.push(['Total Issues', totalIssues.toString()], ['Critical Issues', criticalIssues.toString()], ['Files Analyzed', result.repositoryInfo.files.length.toString()], ['Total Additions', result.repositoryInfo.totalAdditions.toString()], ['Total Deletions', result.repositoryInfo.totalDeletions.toString()], ['Execution Time', `${result.executionTime}ms`], ['Checks Executed', result.checksExecuted.join(', ')]);
102729
- output += 'Analysis Summary\n';
102730
- output += summaryTable.toString() + '\n';
102731
- output += '\n';
103029
+ // Check if this is a code review context
103030
+ const isCodeReview = result.isCodeReview || issues.some(i => i.schema === 'code-review');
103031
+ // Only show "Analysis Summary" table for code review contexts or when there are issues
103032
+ // For other contexts, the execution statistics table already provides summary
103033
+ if (isCodeReview || totalIssues > 0) {
103034
+ // Summary table
103035
+ const summaryTable = new cli_table3_1.default({
103036
+ head: ['Metric', 'Value'],
103037
+ colWidths: [25, 30],
103038
+ style: {
103039
+ head: ['cyan', 'bold'],
103040
+ border: ['grey'],
103041
+ },
103042
+ });
103043
+ // Add issue metrics
103044
+ summaryTable.push(['Total Issues', totalIssues.toString()]);
103045
+ if (criticalIssues > 0) {
103046
+ summaryTable.push(['Critical Issues', criticalIssues.toString()]);
103047
+ }
103048
+ // Add code-review specific metrics if in code review context
103049
+ if (isCodeReview && result.repositoryInfo.files.length > 0) {
103050
+ summaryTable.push(['Files Analyzed', result.repositoryInfo.files.length.toString()], ['Total Additions', result.repositoryInfo.totalAdditions.toString()], ['Total Deletions', result.repositoryInfo.totalDeletions.toString()]);
103051
+ }
103052
+ // Always show execution time and checks executed
103053
+ summaryTable.push(['Execution Time', `${result.executionTime}ms`], ['Checks Executed', result.checksExecuted.join(', ')]);
103054
+ output += 'Analysis Summary\n';
103055
+ output += summaryTable.toString() + '\n';
103056
+ output += '\n';
103057
+ }
102732
103058
  // Issues by category table
102733
103059
  if (issues.length > 0) {
102734
103060
  if (groupByCategory) {
@@ -106563,8 +106889,8 @@ class PRReviewer {
106563
106889
  if (config && checks && checks.length > 0) {
106564
106890
  const { CheckExecutionEngine } = await Promise.resolve().then(() => __importStar(__nccwpck_require__(80299)));
106565
106891
  const engine = new CheckExecutionEngine();
106566
- const groupedResults = await engine.executeGroupedChecks(prInfo, checks, undefined, config, undefined, debug);
106567
- return groupedResults;
106892
+ const { results } = await engine.executeGroupedChecks(prInfo, checks, undefined, config, undefined, debug);
106893
+ return results;
106568
106894
  }
106569
106895
  throw new Error('No configuration provided. Please create a .visor.yaml file with check definitions. ' +
106570
106896
  'Built-in prompts have been removed - all checks must be explicitly configured.');
@@ -156734,14 +157060,53 @@ var init_probeTool = __esm({
156734
157060
  if (!targetDir.startsWith(secureBaseDir + import_path7.default.sep) && targetDir !== secureBaseDir) {
156735
157061
  throw new Error("Path traversal attempt detected. Access denied.");
156736
157062
  }
157063
+ const debug = process.env.DEBUG === "1";
157064
+ if (debug) {
157065
+ console.log(`[DEBUG] Listing files in directory: ${targetDir}`);
157066
+ }
156737
157067
  try {
156738
- const files = await listFilesByLevel({
156739
- directory: targetDir,
156740
- maxFiles: 100,
156741
- respectGitignore: !process.env.PROBE_NO_GITIGNORE || process.env.PROBE_NO_GITIGNORE === "",
156742
- cwd: secureBaseDir
157068
+ const files = await import_fs4.promises.readdir(targetDir, { withFileTypes: true });
157069
+ const formatSize = (size) => {
157070
+ if (size < 1024) return `${size}B`;
157071
+ if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)}K`;
157072
+ if (size < 1024 * 1024 * 1024) return `${(size / (1024 * 1024)).toFixed(1)}M`;
157073
+ return `${(size / (1024 * 1024 * 1024)).toFixed(1)}G`;
157074
+ };
157075
+ const entries = await Promise.all(files.map(async (file) => {
157076
+ const isDirectory = file.isDirectory();
157077
+ const fullPath = import_path7.default.join(targetDir, file.name);
157078
+ let size = 0;
157079
+ try {
157080
+ const stats = await import_fs4.promises.stat(fullPath);
157081
+ size = stats.size;
157082
+ } catch (statError) {
157083
+ if (debug) {
157084
+ console.log(`[DEBUG] Could not stat file ${file.name}:`, statError.message);
157085
+ }
157086
+ }
157087
+ return {
157088
+ name: file.name,
157089
+ isDirectory,
157090
+ size
157091
+ };
157092
+ }));
157093
+ entries.sort((a3, b3) => {
157094
+ if (a3.isDirectory && !b3.isDirectory) return -1;
157095
+ if (!a3.isDirectory && b3.isDirectory) return 1;
157096
+ return a3.name.localeCompare(b3.name);
156743
157097
  });
156744
- return files;
157098
+ const formatted = entries.map((entry) => {
157099
+ const type = entry.isDirectory ? "dir " : "file";
157100
+ const sizeStr = formatSize(entry.size).padStart(8);
157101
+ return `${type} ${sizeStr} ${entry.name}`;
157102
+ });
157103
+ if (debug) {
157104
+ console.log(`[DEBUG] Found ${entries.length} files/directories in ${targetDir}`);
157105
+ }
157106
+ const header = `${targetDir}:
157107
+ `;
157108
+ const output = header + formatted.join("\n");
157109
+ return output;
156745
157110
  } catch (error2) {
156746
157111
  throw new Error(`Failed to list files: ${error2.message}`);
156747
157112
  }
@@ -156759,6 +157124,9 @@ var init_probeTool = __esm({
156759
157124
  if (!targetDir.startsWith(secureBaseDir + import_path7.default.sep) && targetDir !== secureBaseDir) {
156760
157125
  throw new Error("Path traversal attempt detected. Access denied.");
156761
157126
  }
157127
+ if (pattern.includes("**/**") || pattern.split("*").length > 10) {
157128
+ throw new Error("Pattern too complex. Please use a simpler glob pattern.");
157129
+ }
156762
157130
  try {
156763
157131
  const options = {
156764
157132
  cwd: targetDir,
@@ -156768,7 +157136,17 @@ var init_probeTool = __esm({
156768
157136
  if (!recursive) {
156769
157137
  options.deep = 1;
156770
157138
  }
156771
- const files = await (0, import_glob.glob)(pattern, options);
157139
+ const timeoutPromise = new Promise((_2, reject2) => {
157140
+ setTimeout(() => reject2(new Error("Search operation timed out after 10 seconds")), 1e4);
157141
+ });
157142
+ const files = await Promise.race([
157143
+ (0, import_glob.glob)(pattern, options),
157144
+ timeoutPromise
157145
+ ]);
157146
+ const maxResults = 1e3;
157147
+ if (files.length > maxResults) {
157148
+ return files.slice(0, maxResults);
157149
+ }
156772
157150
  return files;
156773
157151
  } catch (error2) {
156774
157152
  throw new Error(`Failed to search files: ${error2.message}`);
@@ -184172,8 +184550,8 @@ When presented with a broken Mermaid diagram, analyze it thoroughly and provide
184172
184550
  debug: this.options.debug,
184173
184551
  tracer: this.options.tracer,
184174
184552
  allowEdit: this.options.allowEdit,
184175
- maxIterations: 2,
184176
- // Limit mermaid fixing to 2 iterations to prevent long loops
184553
+ maxIterations: 10,
184554
+ // Allow more iterations for mermaid fixing to handle complex diagrams
184177
184555
  disableMermaidValidation: true
184178
184556
  // CRITICAL: Disable mermaid validation in nested agent to prevent infinite recursion
184179
184557
  });
@@ -185073,6 +185451,18 @@ var init_ProbeAgent = __esm({
185073
185451
  this.toolImplementations.bash = wrappedTools.bashToolInstance;
185074
185452
  }
185075
185453
  this.wrappedTools = wrappedTools;
185454
+ if (this.debug) {
185455
+ console.error("\n[DEBUG] ========================================");
185456
+ console.error("[DEBUG] ProbeAgent Tools Initialized");
185457
+ console.error("[DEBUG] Session ID:", this.sessionId);
185458
+ console.error("[DEBUG] Available tools:");
185459
+ for (const toolName of Object.keys(this.toolImplementations)) {
185460
+ console.error(`[DEBUG] - ${toolName}`);
185461
+ }
185462
+ console.error("[DEBUG] Allowed folders:", this.allowedFolders);
185463
+ console.error("[DEBUG] Outline mode:", this.outline);
185464
+ console.error("[DEBUG] ========================================\n");
185465
+ }
185076
185466
  }
185077
185467
  /**
185078
185468
  * Initialize the AI model based on available API keys and forced provider setting
@@ -185843,12 +186233,28 @@ You are working with a repository located at: ${searchDirectory}
185843
186233
  const { type } = parsedTool;
185844
186234
  if (type === "mcp" && this.mcpBridge && this.mcpBridge.isMcpTool(toolName)) {
185845
186235
  try {
185846
- if (this.debug) console.log(`[DEBUG] Executing MCP tool '${toolName}' with params:`, params);
186236
+ if (this.debug) {
186237
+ console.error(`
186238
+ [DEBUG] ========================================`);
186239
+ console.error(`[DEBUG] Executing MCP tool: ${toolName}`);
186240
+ console.error(`[DEBUG] Arguments:`);
186241
+ for (const [key, value] of Object.entries(params)) {
186242
+ const displayValue = typeof value === "string" && value.length > 100 ? value.substring(0, 100) + "..." : value;
186243
+ console.error(`[DEBUG] ${key}: ${JSON.stringify(displayValue)}`);
186244
+ }
186245
+ console.error(`[DEBUG] ========================================
186246
+ `);
186247
+ }
185847
186248
  const executionResult = await this.mcpBridge.mcpTools[toolName].execute(params);
185848
186249
  const toolResultContent = typeof executionResult === "string" ? executionResult : JSON.stringify(executionResult, null, 2);
185849
- const preview = createMessagePreview(toolResultContent);
185850
186250
  if (this.debug) {
185851
- console.log(`[DEBUG] MCP tool '${toolName}' executed successfully. Result preview: ${preview}`);
186251
+ const preview = toolResultContent.length > 500 ? toolResultContent.substring(0, 500) + "..." : toolResultContent;
186252
+ console.error(`[DEBUG] ========================================`);
186253
+ console.error(`[DEBUG] MCP tool '${toolName}' completed successfully`);
186254
+ console.error(`[DEBUG] Result preview:`);
186255
+ console.error(preview);
186256
+ console.error(`[DEBUG] ========================================
186257
+ `);
185852
186258
  }
185853
186259
  currentMessages.push({ role: "user", content: `<tool_result>
185854
186260
  ${toolResultContent}
@@ -185856,7 +186262,13 @@ ${toolResultContent}
185856
186262
  } catch (error2) {
185857
186263
  console.error(`Error executing MCP tool ${toolName}:`, error2);
185858
186264
  const toolResultContent = `Error executing MCP tool ${toolName}: ${error2.message}`;
185859
- if (this.debug) console.log(`[DEBUG] MCP tool '${toolName}' execution FAILED.`);
186265
+ if (this.debug) {
186266
+ console.error(`[DEBUG] ========================================`);
186267
+ console.error(`[DEBUG] MCP tool '${toolName}' failed with error:`);
186268
+ console.error(`[DEBUG] ${error2.message}`);
186269
+ console.error(`[DEBUG] ========================================
186270
+ `);
186271
+ }
185860
186272
  currentMessages.push({ role: "user", content: `<tool_result>
185861
186273
  ${toolResultContent}
185862
186274
  </tool_result>` });
@@ -185868,6 +186280,18 @@ ${toolResultContent}
185868
186280
  sessionId: this.sessionId,
185869
186281
  workingDirectory: this.allowedFolders && this.allowedFolders[0] || process.cwd()
185870
186282
  };
186283
+ if (this.debug) {
186284
+ console.error(`
186285
+ [DEBUG] ========================================`);
186286
+ console.error(`[DEBUG] Executing tool: ${toolName}`);
186287
+ console.error(`[DEBUG] Arguments:`);
186288
+ for (const [key, value] of Object.entries(params)) {
186289
+ const displayValue = typeof value === "string" && value.length > 100 ? value.substring(0, 100) + "..." : value;
186290
+ console.error(`[DEBUG] ${key}: ${JSON.stringify(displayValue)}`);
186291
+ }
186292
+ console.error(`[DEBUG] ========================================
186293
+ `);
186294
+ }
185871
186295
  this.events.emit("toolCall", {
185872
186296
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
185873
186297
  name: toolName,
@@ -185909,6 +186333,15 @@ ${toolResultContent}
185909
186333
  } else {
185910
186334
  toolResult = await executeToolCall();
185911
186335
  }
186336
+ if (this.debug) {
186337
+ const resultPreview = typeof toolResult === "string" ? toolResult.length > 500 ? toolResult.substring(0, 500) + "..." : toolResult : toolResult ? JSON.stringify(toolResult, null, 2).substring(0, 500) + "..." : "No Result";
186338
+ console.error(`[DEBUG] ========================================`);
186339
+ console.error(`[DEBUG] Tool '${toolName}' completed successfully`);
186340
+ console.error(`[DEBUG] Result preview:`);
186341
+ console.error(resultPreview);
186342
+ console.error(`[DEBUG] ========================================
186343
+ `);
186344
+ }
185912
186345
  this.events.emit("toolCall", {
185913
186346
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
185914
186347
  name: toolName,
@@ -185917,6 +186350,13 @@ ${toolResultContent}
185917
186350
  status: "completed"
185918
186351
  });
185919
186352
  } catch (toolError) {
186353
+ if (this.debug) {
186354
+ console.error(`[DEBUG] ========================================`);
186355
+ console.error(`[DEBUG] Tool '${toolName}' failed with error:`);
186356
+ console.error(`[DEBUG] ${toolError.message}`);
186357
+ console.error(`[DEBUG] ========================================
186358
+ `);
186359
+ }
185920
186360
  this.events.emit("toolCall", {
185921
186361
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
185922
186362
  name: toolName,
@@ -185966,6 +186406,16 @@ Error: Unknown tool '${toolName}'. Available tools: ${allAvailableTools.join(",
185966
186406
  }
185967
186407
  }
185968
186408
  } else {
186409
+ const hasMermaidCodeBlock = /```mermaid\s*\n[\s\S]*?\n```/.test(assistantResponseContent);
186410
+ const hasNoSchemaOrTools = !options.schema && validTools.length === 0;
186411
+ if (hasMermaidCodeBlock && hasNoSchemaOrTools) {
186412
+ finalResult = assistantResponseContent;
186413
+ completionAttempted = true;
186414
+ if (this.debug) {
186415
+ console.error(`[DEBUG] Accepting mermaid code block as valid completion (no schema, no tools)`);
186416
+ }
186417
+ break;
186418
+ }
185969
186419
  currentMessages.push({ role: "assistant", content: assistantResponseContent });
185970
186420
  let reminderContent;
185971
186421
  if (options.schema) {
@@ -186679,12 +187129,14 @@ __export(index_exports, {
186679
187129
  getBinaryPath: () => getBinaryPath,
186680
187130
  initializeSimpleTelemetryFromOptions: () => initializeSimpleTelemetryFromOptions,
186681
187131
  listFilesByLevel: () => listFilesByLevel,
187132
+ listFilesToolInstance: () => listFilesToolInstance,
186682
187133
  parseXmlToolCall: () => parseXmlToolCall,
186683
187134
  query: () => query,
186684
187135
  querySchema: () => querySchema,
186685
187136
  queryTool: () => queryTool,
186686
187137
  queryToolDefinition: () => queryToolDefinition,
186687
187138
  search: () => search,
187139
+ searchFilesToolInstance: () => searchFilesToolInstance,
186688
187140
  searchSchema: () => searchSchema,
186689
187141
  searchTool: () => searchTool,
186690
187142
  searchToolDefinition: () => searchToolDefinition,
@@ -186707,6 +187159,7 @@ var init_index = __esm({
186707
187159
  init_bash();
186708
187160
  init_ProbeAgent();
186709
187161
  init_simpleTelemetry();
187162
+ init_probeTool();
186710
187163
  }
186711
187164
  });
186712
187165
  init_index();
@@ -216788,7 +217241,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"application/1d-interleaved-parityfec
216788
217241
  /***/ ((module) => {
216789
217242
 
216790
217243
  "use strict";
216791
- module.exports = {"rE":"0.1.72"};
217244
+ module.exports = {"rE":"0.1.73"};
216792
217245
 
216793
217246
  /***/ })
216794
217247