npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@holoscript/ai-validator

v1.2.0

Published

AI hallucination validation layer for HoloScript - prevents invalid AI-generated code from breaking user workflows

Readme

@holoscript/ai-validator

AI hallucination validation layer for HoloScript. Prevents invalid AI-generated code from breaking user workflows by detecting common LLM hallucination patterns.

Features

  • Multi-Strategy Validation - Syntax, semantic, structural, and trait validation
  • Hallucination Detection - Detects 10+ common LLM hallucination patterns
  • Provider-Specific Rules - Custom validation for OpenAI, Anthropic, Gemini
  • Detailed Error Reports - Line numbers, suggestions, severity levels
  • Trait Similarity Matching - Suggests correct traits for typos
  • Configurable Thresholds - Adjustable hallucination score limits
  • 80%+ Test Coverage - Production-ready with comprehensive tests

Installation

pnpm add @holoscript/ai-validator

Quick Start

import { AIValidator } from '@holoscript/ai-validator';

const validator = new AIValidator({
  hallucinationThreshold: 50,
  provider: 'anthropic',
  strict: false,
});

// Validate AI-generated code
const result = await validator.validate(aiGeneratedCode);

if (!result.valid) {
  console.error('Validation failed:');
  result.errors.forEach((err) => {
    console.log(`[${err.severity}] ${err.message}`);
    if (err.suggestion) {
      console.log(`  Suggestion: ${err.suggestion}`);
    }
  });
} else {
  console.log(`✓ Valid code (hallucination score: ${result.metadata.hallucinationScore}/100)`);
}

API Reference

AIValidator

Main validation class with configurable rules.

Constructor Options

interface ValidatorConfig {
  strict?: boolean; // Reject warnings as errors (default: false)
  knownTraits?: string[]; // Custom trait registry
  hallucinationThreshold?: number; // Max hallucination score 0-100 (default: 50)
  detectHallucinations?: boolean; // Enable pattern detection (default: true)
  provider?: 'openai' | 'anthropic' | 'gemini' | 'local' | 'unknown';
}

Methods

validate(code: string): Promise<ValidationResult>

Validates HoloScript code and returns detailed results.

const result = await validator.validate(code);

console.log('Valid:', result.valid);
console.log('Errors:', result.errors.length);
console.log('Warnings:', result.warnings.length);
console.log('Hallucination Score:', result.metadata.hallucinationScore);
getStats(): ValidatorStats

Returns validation statistics.

const stats = validator.getStats();
console.log('Known traits:', stats.knownTraits);
console.log('Hallucination patterns:', stats.hallucinationPatterns);

validateAICode(code, config?)

Convenience function for one-off validation.

import { validateAICode } from '@holoscript/ai-validator';

const result = await validateAICode(aiCode, {
  provider: 'openai',
  hallucinationThreshold: 60,
});

Validation Strategies

1. Syntax Validation

Validates code against HoloScript parser:

// ❌ Invalid: Triple braces
cube {{{
  @color(red)
}}}

// ✅ Valid: Correct syntax
cube {
  @color(red)
}

2. Structural Validation

Checks balanced braces and proper nesting:

// ❌ Invalid: Unclosed brace
cube {
  @color(red)

// ✅ Valid: Balanced
cube {
  @color(red)
}

3. Trait Validation

Ensures traits exist in known registry:

// ❌ Invalid: Unknown trait
cube {
  @magic_flying
  @ai_powered
}

// ✅ Valid: Known traits
cube {
  @grabbable
  @physics
}

4. Hallucination Detection

Detects common LLM hallucination patterns:

| Pattern | Score | Example | | -------------------- | ----- | --------------------------------- | | AI-like traits | 30 | @ai_powered, @smart_detection | | Triple braces | 50 | {{{ or }}} | | OOP syntax | 40 | class, extends, implements | | Placeholders | 60 | [PLACEHOLDER], [YOUR_VALUE] | | TODO comments | 20 | // TODO: Add properties | | HTML/XML | 35 | <cube>...</cube> | | JavaScript | 35 | function createCube() | | Template literals | 45 | @color("${variable}") | | Excessive repetition | 25 | 5+ identical traits |

5. Semantic Validation

Warns about style and performance issues:

// ⚠️ Warning: Empty object
cube {
}

// ⚠️ Warning: Very long line
cube { @position(0, 0, 0, 0, 0, 0, ...[100 values]...) }

Provider-Specific Validation

OpenAI (GPT-4, GPT-3.5)

Detects markdown code fences:

const validator = new AIValidator({ provider: 'openai' });

// ❌ Invalid: Markdown fences
```holoscript
cube { @color(red) }

// ✅ Valid: No fences cube { @color(red) }


### Anthropic (Claude)

Allows explanatory comments:

```typescript
const validator = new AIValidator({ provider: 'anthropic' });

// ✅ Valid: Claude-style comments allowed
cube {
  // This is a red cube
  @color(red)
}

Hallucination Score

The validator calculates a hallucination score (0-100) based on detected patterns:

  • 0-20: Very likely valid code
  • 20-40: Possibly valid, minor issues
  • 40-60: Suspicious patterns detected
  • 60-80: Likely hallucinated
  • 80-100: Almost certainly hallucinated
const result = await validator.validate(suspiciousCode);

if (result.metadata.hallucinationScore > 70) {
  // Regenerate with stricter constraints
  regenerateCode({ moreStrict: true });
}

Integration Examples

With MCP Server

import { AIValidator } from '@holoscript/ai-validator';

const validator = new AIValidator({
  provider: 'anthropic',
  hallucinationThreshold: 50,
});

// In MCP tool handler
async function handleGenerateObject(args: any) {
  const generatedCode = await generateWithLLM(args.prompt);

  const validation = await validator.validate(generatedCode);

  if (!validation.valid) {
    // Provide feedback to LLM for regeneration
    const feedback = validation.errors.map((e) => e.message).join('\n');
    return await generateWithLLM(args.prompt, { feedback });
  }

  return generatedCode;
}

With Security Sandbox

import { AIValidator } from '@holoscript/ai-validator';
import { HoloScriptSandbox } from '@holoscript/security-sandbox';

const validator = new AIValidator();
const sandbox = new HoloScriptSandbox();

// Validate THEN sandbox
async function executeSafely(aiCode: string) {
  // Step 1: Validate
  const validation = await validator.validate(aiCode);
  if (!validation.valid) {
    throw new Error(`Invalid code: ${validation.errors[0].message}`);
  }

  // Step 2: Sandbox
  const result = await sandbox.executeHoloScript(aiCode, {
    source: 'ai-generated',
  });

  return result;
}

Feedback Loop

async function generateWithValidation(prompt: string, maxAttempts = 3) {
  for (let i = 0; i < maxAttempts; i++) {
    const code = await llm.generate(prompt);
    const validation = await validator.validate(code);

    if (validation.valid) {
      return code;
    }

    // Provide validation feedback to LLM
    const feedback = [
      'Your previous attempt had errors:',
      ...validation.errors.map((e) => `- ${e.message}`),
      ...validation.errors.map((e) => (e.suggestion ? `  Try: ${e.suggestion}` : '')),
    ].join('\n');

    prompt = `${prompt}\n\nFeedback from previous attempt:\n${feedback}`;
  }

  throw new Error('Failed to generate valid code after max attempts');
}

Best Practices

1. Set Appropriate Thresholds

// Strict for production
const prodValidator = new AIValidator({
  hallucinationThreshold: 30,
  strict: true,
});

// Lenient for development
const devValidator = new AIValidator({
  hallucinationThreshold: 70,
  strict: false,
});

2. Provider Hints

// Set provider for better validation
const validator = new AIValidator({
  provider: detectProvider(apiKey), // 'openai', 'anthropic', etc.
});

3. Custom Trait Registry

// Add custom traits for domain-specific validation
const validator = new AIValidator({
  knownTraits: [...DEFAULT_TRAITS, '@custom_physics', '@special_rendering'],
});

4. Error Reporting

const result = await validator.validate(code);

if (!result.valid) {
  // Log for debugging
  console.error('Validation errors:', result.errors);

  // Send to monitoring
  monitoring.trackValidationFailure({
    provider: result.metadata.provider,
    hallucinationScore: result.metadata.hallucinationScore,
    errors: result.errors.length,
  });

  // Provide user feedback
  showUserError('Generated code was invalid. Please try again.');
}

License

MIT © Brian X Base Team