All files provider.ts

85.71% Statements 6/7
100% Branches 0/0
66.66% Functions 2/3
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58                                2x         1x       1x               1x                         1x           1x          
import {
  ToolProvider,
  ToolName,
  SpokeOutput,
  ScanOptions,
  ToolScoringOutput,
  AnalysisResult,
  SpokeOutputSchema,
} from '@aiready/core';
import { analyzeAiSignalClarity } from './analyzer';
import { calculateAiSignalClarityScore } from './scoring';
import { AiSignalClarityOptions, AiSignalClarityReport } from './types';
 
/**
 * AI Signal Clarity Tool Provider
 */
export const AiSignalClarityProvider: ToolProvider = {
  id: ToolName.AiSignalClarity,
  alias: ['ai-signal', 'clarity', 'hallucination'],
 
  async analyze(options: ScanOptions): Promise<SpokeOutput> {
    const report = await analyzeAiSignalClarity(
      options as AiSignalClarityOptions
    );
 
    const results: AnalysisResult[] = report.results.map((r) => ({
      fileName: r.filePath,
      issues: r.issues as any[],
      metrics: {
        aiSignalClarityScore: 100, // Default or calculated via scoring
      },
    }));
 
    return SpokeOutputSchema.parse({
      results,
      summary: report.summary,
      metadata: {
        toolName: ToolName.AiSignalClarity,
        version: '0.9.5',
        timestamp: new Date().toISOString(),
        aggregateSignals: report.aggregateSignals,
      },
    });
  },
 
  score(output: SpokeOutput, options: ScanOptions): ToolScoringOutput {
    const report = {
      summary: output.summary,
      aggregateSignals: (output.metadata as any).aggregateSignals,
      results: [], // Not needed for scoring
    } as unknown as AiSignalClarityReport;
 
    return calculateAiSignalClarityScore(report);
  },
 
  defaultWeight: 11,
};