test-real-claude-content.js•4.08 kB
#!/usr/bin/env node
/**
* Test with the actual content from the user's report
* This tests the real 164-line photosynthesis lesson
*/
import { ContentWidgetAnalyzer } from '../../src/tools/analyze-content-for-widgets.js';
import { readFileSync } from 'fs';
// Read the actual content that Claude Desktop created
const realClaudeContent = readFileSync('/Users/ricardokawasaki/Desktop/euconquisto-composer-mcp-poc/tests/lessons/aula-fontossíntese-7-ano-v2.md', 'utf8');
const claudeContentStructure = {
title: "Aula de Ciências: Fotossíntese - A Fábrica Verde das Plantas",
subject: "Ciências",
gradeLevel: "7º ano",
content: realClaudeContent
};
async function testRealClaudeContent() {
console.log('🧪 Testing analyze_content_for_widgets with REAL Claude Desktop content (164 lines)');
console.log(`📄 Content length: ${realClaudeContent.length} characters`);
try {
const analyzer = new ContentWidgetAnalyzer();
const result = await analyzer.analyzeContent({
claudeContent: claudeContentStructure
});
console.log(' ✓ Analysis completed successfully');
console.log(' 📊 Result structure:', {
success: result.success,
contentLength: result.debug?.contentLength || 0,
segmentsAnalyzed: result.debug?.segmentsAnalyzed || 0,
widgetTypes: result.data?.selectedWidgetTypes?.map(w => w.type) || [],
totalWidgets: result.data?.selectedWidgetTypes?.length || 0
});
// Check content preservation
const preservationRatio = (result.debug?.contentLength || 0) / realClaudeContent.length;
console.log(` 📈 Content preservation: ${Math.round(preservationRatio * 100)}% (${result.debug?.contentLength || 0}/${realClaudeContent.length} chars)`);
// Check segments and their types
const segments = result.data?.contentStructure?.segments || [];
console.log(` 📋 Segments by type:`);
const typeCount = {};
segments.forEach(segment => {
typeCount[segment.type] = (typeCount[segment.type] || 0) + 1;
});
Object.entries(typeCount).forEach(([type, count]) => {
console.log(` ${type}: ${count} segments`);
});
// Check for specific educational components
const hasQuiz = segments.some(s => s.type === 'assessment');
const hasVocabulary = segments.some(s => s.type === 'vocabulary');
const hasExperiments = segments.some(s => s.content.toLowerCase().includes('experiment'));
const hasConclusion = segments.some(s => s.content.toLowerCase().includes('conclusão'));
console.log(` 🔍 Educational components detected:`);
console.log(` Quiz/Assessment: ${hasQuiz ? '✓' : '✗'}`);
console.log(` Vocabulary: ${hasVocabulary ? '✓' : '✗'}`);
console.log(` Experiments: ${hasExperiments ? '✓' : '✗'}`);
console.log(` Conclusion: ${hasConclusion ? '✓' : '✗'}`);
// Check widget diversity
const widgetTypes = result.data?.selectedWidgetTypes?.map(w => w.type) || [];
const uniqueTypes = [...new Set(widgetTypes)];
console.log(` 🎯 Widget diversity: ${uniqueTypes.length} unique types`);
console.log(` Types: ${uniqueTypes.join(', ')}`);
// Compare with previous results
if (uniqueTypes.length >= 4) {
console.log(' 🎉 EXCELLENT: High widget diversity achieved!');
} else if (uniqueTypes.length >= 3) {
console.log(' ✅ GOOD: Reasonable widget diversity');
} else {
console.log(' ⚠️ NEEDS IMPROVEMENT: Limited widget diversity');
}
if (preservationRatio >= 0.9) {
console.log(' 🎉 EXCELLENT: High content preservation!');
} else if (preservationRatio >= 0.7) {
console.log(' ✅ GOOD: Reasonable content preservation');
} else {
console.log(' ⚠️ NEEDS IMPROVEMENT: Content loss detected');
}
return result;
} catch (error) {
console.error(' ❌ Test failed with error:', error.message);
return null;
}
}
// Run test
testRealClaudeContent().catch(console.error);