#!/usr/bin/env node
/**
* Test script for Node.js Client Library
*/
import SelfLearningClient from './lib/self-learning-client.js';
async function testClient() {
console.log('π§ͺ Testing Node.js Client Library...\n');
// Initialize client
const client = new SelfLearningClient({ port: 8765 });
try {
// Test connection
console.log('1. Testing connection...');
const connected = await client.connect();
console.log(` β
Connected: ${connected}\n`);
// Test health check
console.log('2. Testing health check...');
const health = await client.getHealth();
console.log(` β
Health: ${health.status}`);
console.log(` π Uptime: ${Math.round(health.uptime / 1000)}s\n`);
// Test status
console.log('3. Testing status...');
const status = await client.getStatus();
console.log(` β
Running: ${status.running}`);
console.log(` π§ Learning Active: ${status.learning.active}`);
console.log(` π Patterns: ${status.learning.patterns}\n`);
// Test pattern analysis
console.log('4. Testing pattern analysis...');
const interaction = {
type: 'test_interaction',
input: 'Test client library usage',
output: 'Client library working correctly',
success: true,
context: { source: 'node-client-test' }
};
const result = await client.analyzePattern(interaction);
console.log(` β
Pattern ID: ${result.patternId.substring(0, 8)}...`);
console.log(` π§ Tool Sequence: ${result.features.toolSequence.join(', ')}\n`);
// Test insights
console.log('5. Testing insights...');
const insights = await client.getInsights();
console.log(` β
Success Rate: ${(insights.insights.metrics.successRate * 100).toFixed(1)}%`);
console.log(` π§ Knowledge Items: ${insights.insights.knowledgeItems}`);
console.log(` π Learning Cycles: ${insights.insights.metrics.learningCycles}\n`);
// Test WebSocket connection
console.log('6. Testing WebSocket...');
await client.connectWebSocket();
// Set up event listeners
client.on('websocket-connected', () => {
console.log(' β
WebSocket connected');
});
client.on('realtime-update', (data) => {
console.log(' π‘ Received real-time update:', data.type || 'unknown');
});
// Wait a bit for WebSocket to connect
await new Promise(resolve => setTimeout(resolve, 1000));
// Test multiple patterns
console.log('7. Testing bulk operations...');
const interactions = [
{ type: 'bulk_test', input: 'Test 1', output: 'Result 1', success: true },
{ type: 'bulk_test', input: 'Test 2', output: 'Result 2', success: true },
{ type: 'bulk_test', input: 'Test 3', output: 'Result 3', success: false }
];
const bulkResults = await client.analyzeMultiplePatterns(interactions);
const successCount = bulkResults.filter(r => r.success).length;
console.log(` β
Bulk analysis: ${successCount}/${bulkResults.length} successful\n`);
// Test learning session
console.log('8. Testing learning session...');
const session = client.createLearningSession('test-session-' + Date.now());
session.addInteraction({ type: 'session_test', input: 'Session test', output: 'Session result', success: true });
const sessionSummary = session.getSummary();
console.log(` β
Session ID: ${sessionSummary.sessionId.substring(0, 20)}...`);
console.log(` π’ Interactions: ${sessionSummary.interactions}\n`);
// Clean up
client.disconnectWebSocket();
console.log('β
All Node.js client tests passed!\n');
} catch (error) {
console.error('β Client test failed:', error.message);
process.exit(1);
}
}
// Event listeners for demonstration
const client = new SelfLearningClient({ port: 8765 });
client.on('connected', () => {
console.log('π Client connected to server');
});
client.on('error', (error) => {
console.log('β οΈ Client error:', error.message);
});
client.on('request-retry', (info) => {
console.log(`π Retrying request (attempt ${info.attempt}): ${info.method} ${info.endpoint}`);
});
// Run the test
await testClient();