Files
n8n-mcp/tests/test-direct-extraction.js
czlonkowski 078b67ff35 Implement SQLite database with full-text search for n8n node documentation
Major features implemented:
- SQLite storage service with FTS5 for fast node search
- Database rebuild mechanism for bulk node extraction
- MCP tools: search_nodes, extract_all_nodes, get_node_statistics
- Production Docker deployment with persistent storage
- Management scripts for database operations
- Comprehensive test suite for all functionality

Database capabilities:
- Stores node source code and metadata
- Full-text search by node name or content
- No versioning (stores latest only as per requirements)
- Supports complete database rebuilds
- ~4.5MB database with 500+ nodes indexed

Production features:
- Automated deployment script
- Docker Compose production configuration
- Database initialization on first run
- Volume persistence for data
- Management utilities for operations

Documentation:
- Updated README with complete instructions
- Production deployment guide
- Clear troubleshooting section
- API reference for all new tools

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-07 21:12:17 +00:00

79 lines
2.7 KiB
JavaScript
Executable File

#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
// Import the NodeSourceExtractor
const { NodeSourceExtractor } = require('../dist/utils/node-source-extractor');
async function testExtraction() {
console.log('=== Direct Node Extraction Test ===\n');
const extractor = new NodeSourceExtractor();
// Test extraction of AI Agent node
const nodeType = '@n8n/n8n-nodes-langchain.Agent';
console.log(`Testing extraction of: ${nodeType}`);
// First, let's debug what paths are being searched
console.log('\nSearching in paths:');
const searchPaths = [
'/usr/local/lib/node_modules/n8n/node_modules',
'/app/node_modules',
'/home/node/.n8n/custom/nodes',
'./node_modules'
];
for (const basePath of searchPaths) {
console.log(`- ${basePath}`);
try {
const exists = fs.existsSync(basePath);
console.log(` Exists: ${exists}`);
if (exists) {
const items = fs.readdirSync(basePath).slice(0, 5);
console.log(` Sample items: ${items.join(', ')}...`);
}
} catch (e) {
console.log(` Error: ${e.message}`);
}
}
try {
const result = await extractor.extractNodeSource(nodeType, true);
console.log('\n✅ Extraction successful!');
console.log(`Source file: ${result.location}`);
console.log(`Code length: ${result.sourceCode.length} characters`);
console.log(`Credential code found: ${result.credentialCode ? 'Yes' : 'No'}`);
console.log(`Package.json found: ${result.packageInfo ? 'Yes' : 'No'}`);
// Show first 500 characters of the code
console.log('\nFirst 500 characters of code:');
console.log('=' .repeat(60));
console.log(result.sourceCode.substring(0, 500) + '...');
console.log('=' .repeat(60));
// Show credential code if found
if (result.credentialCode) {
console.log('\nCredential code found!');
console.log('First 200 characters of credential code:');
console.log(result.credentialCode.substring(0, 200) + '...');
}
// Check if we can find it in Docker volume
const dockerPath = '/usr/local/lib/node_modules/n8n/node_modules/.pnpm/@n8n+n8n-nodes-langchain@file+packages+@n8n+nodes-langchain_f35e7d377a7fe4d08dc2766706b5dbff/node_modules/@n8n/n8n-nodes-langchain/dist/nodes/agents/Agent/Agent.node.js';
if (fs.existsSync(dockerPath)) {
console.log('\n✅ File also found in expected Docker path');
const dockerContent = fs.readFileSync(dockerPath, 'utf8');
console.log(`Docker file size: ${dockerContent.length} bytes`);
}
} catch (error) {
console.error('\n❌ Extraction failed:', error.message);
console.error('Stack trace:', error.stack);
}
}
testExtraction().catch(console.error);