test-session.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /**
  2. * Quick test script to verify the framework works with real session data
  3. */
  4. const { SessionReader, MessageParser, TimelineBuilder } = require('./dist/index.js');
  5. // Test with the opencode-agents project
  6. const projectPath = '/Users/darrenhinde/Documents/GitHub/opencode-agents';
  7. console.log('🔍 Testing OpenCode Evaluation Framework\n');
  8. console.log('Project:', projectPath);
  9. console.log('─'.repeat(60));
  10. // Create reader
  11. const reader = new SessionReader(projectPath);
  12. // List sessions
  13. console.log('\n📋 Listing sessions...');
  14. const sessions = reader.listSessions();
  15. console.log(`Found ${sessions.length} sessions`);
  16. if (sessions.length > 0) {
  17. // Show first 3 sessions
  18. console.log('\nMost recent sessions:');
  19. sessions.slice(0, 3).forEach((session, i) => {
  20. const date = new Date(session.time.created).toLocaleString();
  21. console.log(` ${i + 1}. ${session.id}`);
  22. console.log(` Title: ${session.title.substring(0, 60)}...`);
  23. console.log(` Created: ${date}`);
  24. });
  25. // Test with first session
  26. const testSession = sessions[0];
  27. console.log('\n─'.repeat(60));
  28. console.log(`\n🧪 Testing with session: ${testSession.id}\n`);
  29. // Get messages
  30. const messages = reader.getMessages(testSession.id);
  31. console.log(`📨 Messages: ${messages.length}`);
  32. // Create parser
  33. const parser = new MessageParser();
  34. // Analyze messages
  35. let userMessages = 0;
  36. let assistantMessages = 0;
  37. let agents = new Set();
  38. let models = new Set();
  39. messages.forEach(msg => {
  40. if (msg.role === 'user') userMessages++;
  41. if (msg.role === 'assistant') {
  42. assistantMessages++;
  43. const agent = parser.getAgent(msg);
  44. if (agent) agents.add(agent);
  45. const model = parser.getModel(msg);
  46. if (model) models.add(model.modelID);
  47. }
  48. });
  49. console.log(` - User messages: ${userMessages}`);
  50. console.log(` - Assistant messages: ${assistantMessages}`);
  51. console.log(` - Agents: ${Array.from(agents).join(', ') || 'none'}`);
  52. console.log(` - Models: ${Array.from(models).join(', ') || 'none'}`);
  53. // Build timeline
  54. console.log('\n⏱️ Building timeline...');
  55. const builder = new TimelineBuilder(reader);
  56. const timeline = builder.buildTimeline(testSession.id);
  57. const summary = builder.getSummary(timeline);
  58. console.log(` - Total events: ${summary.totalEvents}`);
  59. console.log(` - User messages: ${summary.userMessages}`);
  60. console.log(` - Assistant messages: ${summary.assistantMessages}`);
  61. console.log(` - Tool calls: ${summary.toolCalls}`);
  62. console.log(` - Tools used: ${summary.tools.join(', ') || 'none'}`);
  63. console.log(` - Duration: ${(summary.duration / 1000).toFixed(2)}s`);
  64. // Check for execution tools
  65. const toolCalls = builder.getToolCalls(timeline);
  66. const executionTools = ['bash', 'write', 'edit', 'task'];
  67. const usedExecutionTools = summary.tools.filter(t => executionTools.includes(t));
  68. if (usedExecutionTools.length > 0) {
  69. console.log(`\n⚙️ Execution tools used: ${usedExecutionTools.join(', ')}`);
  70. // Check for approval
  71. const assistantMsgs = builder.getAssistantMessages(timeline);
  72. let foundApproval = false;
  73. for (const event of assistantMsgs) {
  74. if (parser.hasApprovalRequest(event.data.parts)) {
  75. foundApproval = true;
  76. break;
  77. }
  78. }
  79. console.log(` - Approval requested: ${foundApproval ? '✅ Yes' : '❌ No'}`);
  80. }
  81. console.log('\n─'.repeat(60));
  82. console.log('\n✅ Framework test completed successfully!\n');
  83. } else {
  84. console.log('\n⚠️ No sessions found for this project');
  85. console.log(' Try running OpenCode in this project first to generate session data.\n');
  86. }